import { visit } from 'unist-util-visit';
import fetch$3 from 'cross-fetch';
import { parseFragment } from 'parse5';
import { fromParse5 } from 'hast-util-from-parse5';
import { parse as parse$8, format as format$8 } from '@citation-js/name';
import require$$0 from 'child_process';
import path from 'path';
import Url from 'url';
import Stream from 'stream';
import http from 'http';
import punycode from 'punycode';
import https from 'https';
import zlib from 'zlib';
import { parse as parse$9, format as format$9 } from '@citation-js/date';
import CSL from 'citeproc';
import yaml from 'js-yaml';
function _wrapRegExp() {
_wrapRegExp = function (e, r) {
return new BabelRegExp(e, void 0, r);
};
var e = RegExp.prototype,
r = new WeakMap();
function BabelRegExp(e, t, p) {
var o = new RegExp(e, t);
return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype);
}
function buildGroups(e, t) {
var p = r.get(t);
return Object.keys(p).reduce(function (r, t) {
var o = p[t];
if ("number" == typeof o) r[t] = e[o];else {
for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;
r[t] = e[o[i]];
}
return r;
}, Object.create(null));
}
return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {
var t = e.exec.call(this, r);
if (t) {
t.groups = buildGroups(t, this);
var p = t.indices;
p && (p.groups = buildGroups(p, this));
}
return t;
}, BabelRegExp.prototype[Symbol.replace] = function (t, p) {
if ("string" == typeof p) {
var o = r.get(this);
return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)>/g, function (e, r) {
var t = o[r];
return "$" + (Array.isArray(t) ? t.join("$") : t);
}));
}
if ("function" == typeof p) {
var i = this;
return e[Symbol.replace].call(this, t, function () {
var e = arguments;
return "object" != typeof e[e.length - 1] && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);
});
}
return e[Symbol.replace].call(this, t, p);
}, _wrapRegExp.apply(this, arguments);
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
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
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
// Regex adapted from https://github.com/Zettlr/Zettlr/blob/develop/source/common/util/extract-citations.ts
/**
* Citation detection: The first alternative matches "full" citations surrounded
* by square brackets, whereas the second one matches in-text citations,
* optionally with suffixes.
*
* * Group 1 matches regular "full" citations
* * Group 2 matches in-text citations (not surrounded by brackets)
* * Group 3 matches optional square-brackets suffixes to group 2 matches
*
* For more information, see https://pandoc.org/MANUAL.html#extension-citations
*
* @var {RegExp}
*/
const citationRE = /(?:\[((?:[\0-Z\\\^-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*@(?:[\0-Z\\\^-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)\])|(?<=[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|^|(\x2D))(?:@((?:[0-9A-Z_a-z\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\u0560-\u0588\u05D0-\u05EA\u05EF-\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\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\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\u09FC\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\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\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\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\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\u2183\u2184\u2C00-\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\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\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-\uAB69\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\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\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-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\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[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\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]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\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-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*(?:[0-9A-Z_a-z\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\u0560-\u0588\u05D0-\u05EA\u05EF-\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\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\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\u09FC\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\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\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\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\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\u2183\u2184\u2C00-\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\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\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-\uAB69\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\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\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-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\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[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\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]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\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-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])|\{(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+\})(?:[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+\[((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?)\])?)/;
/**
* I hate everything at this. This can match every single possible variation on
* whatever the f*** you can possibly do within square brackets according to the
* documentation. I opted for named groups for these because otherwise I have no
* idea what I have been doing here.
*
* * Group prefix: Contains the prefix, ends with a dash if we should suppress the author
* * Group citekey: Contains the actual citekey, can be surrounded in curly brackets
* * Group explicitLocator: Contains an explicit locator statement. If given, we MUST ignore any form of locator in the suffix
* * Group explicitLocatorInSuffix: Same as above, but not concatenated to the citekey
* * Group suffix: Contains the suffix, but may start with a locator (if explicitLocator and explicitLocatorInSuffix are not given)
*
* @var {RegExp}
*/
const fullCitationRE = /*#__PURE__*/_wrapRegExp(/((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)?(?:@((?:[0-9A-Z_a-z\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\u0560-\u0588\u05D0-\u05EA\u05EF-\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\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\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\u09FC\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\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\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\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\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\u2183\u2184\u2C00-\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\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\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-\uAB69\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\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\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-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\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[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\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]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\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-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[\0-\x08\x0E-\x1F!-z\|-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*(?:[0-9A-Z_a-z\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\u0560-\u0588\u05D0-\u05EA\u05EF-\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\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\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\u09FC\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\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\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\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\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\u2183\u2184\u2C00-\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\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\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-\uAB69\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\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\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-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\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[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\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]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\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-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])|\{(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+\}))(?:\{((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)\})?(?:,[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+(?:\{((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)\})?((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*))?/, {
prefix: 1,
citekey: 2,
explicitLocator: 3,
explicitLocatorInSuffix: 4,
suffix: 5
});
/**
* This regular expression matches locator ranges, like the following:
*
* * 23-45, and further (here it matches up to, not including the comma)
* * 45
* * 15423
* * 14235-12532
* * 12-34, 23, 56
* * 12, 23-14, 23
* * 12, 54, 12-23
* * 1, 1-4
* * 3
* * NEW NEW NEW: Now also matches Roman numerals as sometimes used in forewords!
*
* @var {RegExp}
*/
const locatorRE = /^(?:[\d, -]*\d|[ivxlcdm, -]*[ivxlcdm])/i;
/**
* The locatorLabels have been sourced from the Citr library. Basically it's just
* a map with valid CSL locator labels and an array of possible natural labels
* which a user might want to write (instead of the standardized labels).
*
* @var {{ [key: string]: string[] }}}
*/
const locatorLabels = {
book: ['Buch', 'Bücher', 'B.', 'book', 'books', 'bk.', 'bks.', 'livre', 'livres', 'liv.'],
chapter: ['Kapitel', 'Kap.', 'chapter', 'chapters', 'chap.', 'chaps', 'chapitre', 'chapitres'],
column: ['Spalte', 'Spalten', 'Sp.', 'column', 'columns', 'col.', 'cols', 'colonne', 'colonnes'],
figure: ['Abbildung', 'Abbildungen', 'Abb.', 'figure', 'figures', 'fig.', 'figs'],
folio: ['Blatt', 'Blätter', 'Fol.', 'folio', 'folios', 'fol.', 'fols', 'fᵒ', 'fᵒˢ'],
issue: ['Nummer', 'Nummern', 'Nr.', 'number', 'numbers', 'no.', 'nos.', 'numéro', 'numéros', 'nᵒ', 'nᵒˢ'],
line: ['Zeile', 'Zeilen', 'Z', 'line', 'lines', 'l.', 'll.', 'ligne', 'lignes'],
note: ['Note', 'Noten', 'N.', 'note', 'notes', 'n.', 'nn.'],
opus: ['Opus', 'Opera', 'op.', 'opus', 'opera', 'opp.'],
page: ['Seite', 'Seiten', 'S.', 'page', 'pages', 'p.', 'pp.'],
paragraph: ['Absatz', 'Absätze', 'Abs.', '¶', '¶¶', 'paragraph', 'paragraphs', 'para.', 'paras', 'paragraphe', 'paragraphes', 'paragr.'],
part: ['Teil', 'Teile', 'part', 'parts', 'pt.', 'pts', 'partie', 'parties', 'part.'],
section: ['Abschnitt', 'Abschnitte', 'Abschn.', '§', '§§', 'section', 'sections', 'sec.', 'secs', 'sect.'],
'sub verbo': ['sub verbo', 'sub verbis', 's. v.', 's. vv.', 's.v.', 's.vv.'],
verse: ['Vers', 'Verse', 'V.', 'verse', 'verses', 'v.', 'vv.', 'verset', 'versets'],
volume: ['Band', 'Bände', 'Bd.', 'Bde.', 'volume', 'volumes', 'vol.', 'vols.']
};
/**
* Parses a given citation string and return entries and isComposite flag required for cite-proc.
* Adapted from https://github.com/Zettlr/Zettlr/blob/develop/source/common/util/extract-citations.ts
*
* @param {RegExpMatchArray} regexMatch Cite string in the form of '[@item]' or '@item'
* @return {[CiteItem[], boolean]} [entries, isComposite]
*/
const parseCitation = regexMatch => {
/** @type {CiteItem[]} */
let entries = [];
let isComposite = false;
const fullCitation = regexMatch[1];
const inTextSuppressAuthor = regexMatch[2];
const inTextCitation = regexMatch[3];
const optionalSuffix = regexMatch[4];
if (fullCitation !== undefined) {
// Handle citations in the form of [@item1; @item2]
for (const citationPart of fullCitation.split(';')) {
const match = fullCitationRE.exec(citationPart.trim());
if (match === null) {
continue; // Faulty citation
}
// Prefix is the portion before @ e.g. [see @item1] or an empty string
// We explicitly cast groups since we have groups in our RegExp and as
// such the groups object will be set.
/** @type {CiteItem} */
const thisCitation = {
id: match.groups.citekey.replace(/{(.+)}/, '$1'),
prefix: undefined,
locator: undefined,
label: 'page',
'suppress-author': false,
suffix: undefined
};
// First, deal with the prefix. The speciality here is that it can
// indicate if we should suppress the author.
const rawPrefix = match.groups.prefix;
if (rawPrefix !== undefined) {
thisCitation['suppress-author'] = rawPrefix.trim().endsWith('-');
if (thisCitation['suppress-author']) {
thisCitation.prefix = rawPrefix.substring(0, rawPrefix.trim().length - 1).trim();
} else {
thisCitation.prefix = rawPrefix.trim();
}
}
// Second, deal with the suffix. This one can be much more tricky than
// the prefix. We have three alternatives where the locator may be
// present: If we have an explicitLocator or an explicitLocatorInSuffix,
// we should extract the locator from there and leave the actual suffix
// untouched. Only if those two alternatives are not present, then we
// have a look at the rawSuffix and extract a (potential) locator.
const explicitLocator = match.groups.explicitLocator;
const explicitLocatorInSuffix = match.groups.explicitLocatorInSuffix;
const rawSuffix = match.groups.suffix;
let suffixToParse;
let containsLocator = true;
if (explicitLocator === undefined && explicitLocatorInSuffix === undefined) {
// Potential locator in rawSuffix. Only in this case should we overwrite
// the suffix (hence the same if-condition below)
suffixToParse = rawSuffix;
containsLocator = false;
} else if (explicitLocatorInSuffix !== undefined || explicitLocator !== undefined) {
suffixToParse = explicitLocator !== undefined ? explicitLocator : explicitLocatorInSuffix;
thisCitation.suffix = rawSuffix == null ? void 0 : rawSuffix.trim();
}
const {
label,
locator,
suffix
} = parseSuffix(suffixToParse, containsLocator);
thisCitation.locator = locator;
if (label !== undefined) {
thisCitation.label = label;
}
if (explicitLocator === undefined && explicitLocatorInSuffix === undefined) {
thisCitation.suffix = suffix;
} else if (suffix !== undefined && thisCitation.locator !== undefined) {
// If we're here, we should not change the suffix, but parseSuffix may
// have put something into the suffix return. If we're here, that will
// definitely be a part of the locator.
thisCitation.locator += suffix;
}
entries.push(thisCitation);
}
} else {
// We have an in-text citation, so we can take a shortcut
isComposite = true;
entries.push(_extends({
prefix: undefined,
id: inTextCitation.replace(/{(.+)}/, '$1'),
'suppress-author': inTextSuppressAuthor !== undefined
}, parseSuffix(optionalSuffix, false)));
}
return [entries, isComposite];
};
/**
* This takes a suffix and extracts optional label and locator from this. Pass
* true for the containsLocator property to indicate to this function that what
* it got was not a regular suffix with an optional locator, but an explicit
* locator so it knows it just needs to look for an optional label.
*
* @param {string} suffix The suffix to parse
* @param {boolean} containsLocator If true, forces parseSuffix to return a locator
*
* @return {CiteItemSuffix} An object containing three optional properties locator, label, or suffix.
*/
function parseSuffix(suffix, containsLocator) {
/** @type {CiteItemSuffix} */
const retValue = {
locator: undefined,
label: 'page',
suffix: undefined
};
if (suffix === undefined) {
return retValue;
}
// Make sure the suffix does not start or end with spaces
suffix = suffix.trim();
// If there is a label, the suffix must start with it
for (const label in locatorLabels) {
for (const natural of locatorLabels[label]) {
if (suffix.toLowerCase().startsWith(natural.toLowerCase())) {
retValue.label = label;
if (containsLocator) {
// The suffix actually is the full locator, we just had to extract
// the label from it. There is no remaining suffix.
retValue.locator = suffix.substr(natural.length).trim();
} else {
// The caller indicated that this is a regular suffix, so we must also
// extract the locator from what is left after label extraction.
retValue.suffix = suffix.substr(natural.length).trim();
const match = locatorRE.exec(retValue.suffix);
if (match !== null) {
retValue.locator = match[0]; // Extract the full match
retValue.suffix = retValue.suffix.substr(match[0].length).trim();
}
}
return retValue; // Early exit
}
}
}
// If we're here, there was no explicit label given, but the caller has indicated
// that this suffix MUST contain a locator. This means that the whole suffix is
// the locator.
if (containsLocator) {
retValue.locator = suffix;
} else {
// The caller has not indicated that the whole suffix is the locator, so it
// can be at the beginning. We only accept simple page/number ranges here.
// For everything, the user should please be more specific.
const match = locatorRE.exec(suffix);
if (match !== null) {
retValue.locator = match[0]; // Full match is the locator
retValue.suffix = suffix.substr(match[0].length).trim(); // The rest is the suffix.
}
}
return retValue;
}
const readFile = async path => {
if (isValidHttpUrl(path)) {
return fetch$3(path).then(response => response.text()).then(data => data);
} else {
{
return import('fs').then(fs => fs.readFileSync(path, 'utf8'));
}
}
};
/**
* Check if valid URL
* https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url
*
* @param {string} str
* @return {boolean}
*/
const isValidHttpUrl = str => {
let url;
try {
url = new URL(str);
} catch (_) {
return false;
}
return url.protocol === 'http:' || url.protocol === 'https:';
};
/**
* Get bibliography by merging options and vfile data
*
* @param {import('./generator.js').Options} options
* @param {import('vfile').VFile} file
*/
const getBibliography = async (options, file) => {
var _file$data;
/** @type {string[]} */
let bibliography = [];
if (options.bibliography) {
bibliography = typeof options.bibliography === 'string' ? [options.bibliography] : options.bibliography;
// @ts-ignore
} else if (file != null && (_file$data = file.data) != null && (_file$data = _file$data.frontmatter) != null && _file$data.bibliography) {
// @ts-ignore
bibliography = typeof file.data.frontmatter.bibliography === 'string' ? [file.data.frontmatter.bibliography] : file.data.frontmatter.bibliography;
// If local path, get absolute path
for (let i = 0; i < bibliography.length; i++) {
if (!isValidHttpUrl(bibliography[i])) {
{
bibliography[i] = await import('path').then(path => path.join(options.path || file.cwd, bibliography[i]));
}
}
}
}
return bibliography;
};
/**
* Load CSL - supports predefined name from config.templates.data or http, file path (nodejs)
*
* @param {*} Cite cite object from citation-js
* @param {string} format CSL name e.g. apa or file path to CSL file
* @param {string} root optional root path
*/
const loadCSL = async (Cite, format, root = '') => {
const config = Cite.plugins.config.get('@csl');
if (!Object.keys(config.templates.data).includes(format)) {
const cslName = `customCSL-${Math.random().toString(36).slice(2, 7)}`;
let cslPath = '';
if (isValidHttpUrl(format)) cslPath = format;else {
cslPath = await import('path').then(path => path.join(root, format));
}
try {
config.templates.add(cslName, await readFile(cslPath));
} catch (err) {
throw new Error(`Input CSL option, ${format}, is invalid or is an unknown file.`);
}
return cslName;
} else {
return format;
}
};
/**
* Load locale - supports predefined name from config.locales.data or http, file path (nodejs)
*
* @param {*} Cite cite object from citation-js
* @param {string} format locale name
* @param {string} root optional root path
*/
const loadLocale = async (Cite, format, root = '') => {
const config = Cite.plugins.config.get('@csl');
if (!Object.keys(config.locales.data).includes(format)) {
let localePath = '';
if (isValidHttpUrl(format)) localePath = format;else {
localePath = await import('path').then(path => path.join(root, format));
}
try {
const file = await readFile(localePath);
const xmlLangRe = /xml:lang="(.+)"/;
const localeName = file.match(xmlLangRe)[1];
config.locales.add(localeName, file);
return localeName;
} catch (err) {
throw new Error(`Input locale option, ${format}, is invalid or is an unknown file.`);
}
} else {
return format;
}
};
/**
* Get citation format
*
* @param {*} citeproc citeproc
* @returns string
*/
const getCitationFormat = citeproc => {
const info = citeproc.cslXml.dataObj.children[0];
const node = info.children.find(x => x['attrs'] && x['attrs']['citation-format']);
// citation-format takes 5 possible values
// https://docs.citationstyles.org/en/stable/specification.html#toc-entry-14
/** @type {'author-date' | 'author' | 'numeric' | 'note' | 'label'} */
const citationFormat = node['attrs']['citation-format'];
return citationFormat;
};
/**
* Get registry objects that matches a list of relevantIds
* If sorted is false, retrieve registry item in the order of the given relevantIds
*
* @param {*} citeproc citeproc
* @param {string[]} relevantIds
* @param {boolean} sorted
* @return {*} registry objects that matches Ids, in the correct order
*/
const getSortedRelevantRegistryItems = (citeproc, relevantIds, sorted) => {
const res = [];
if (sorted) {
// If sorted follow registry order
for (const item of citeproc.registry.reflist) {
if (relevantIds.includes(item.id)) res.push(item);
}
} else {
// Otherwise follow the relevantIds
for (const id of relevantIds) {
res.push(citeproc.registry.reflist.find(x => x.id === id));
}
}
return res;
};
/**
* Split a string into two parts based on a given index position
*
* @param {string} str
* @param {number} index
* @return {string[]}
*/
const split = (str, index) => {
return [str.slice(0, index), str.slice(index)];
};
/**
* Check if two registry objects belong to the same author
* Currently only checks on family name
*
* @param {*} item registry object
* @param {*} item2 registry object
* @return {boolean}
*/
const isSameAuthor = (item, item2) => {
const authorList = item.ref.author;
const authorList2 = item2.ref.author;
if (authorList.length !== authorList2.length) return false;
for (let i = 0; i < authorList.length; i++) {
if (authorList[i].family !== authorList2[i].family) return false;
}
return true;
};
/**
* Convert HTML to HAST node
*
* @param {string} html
*/
const htmlToHast = html => {
const p5ast = parseFragment(html);
// @ts-ignore
return fromParse5(p5ast).children[0];
};
/**
* @typedef {import('./types').CiteItem} CiteItem
* @typedef {import('./types').Mode} Mode
* @typedef {import('./types').Options} Options
*/
/**
* Generate citation using citeproc
* This accounts for prev citations and additional properties
*
* @param {*} citeproc
* @param {Mode} mode
* @param {CiteItem[]} entries
* @param {string} citationIdRoot
* @param {number} citationId
* @param {any[]} citationPre
* @param {Options} options
* @param {boolean} isComposite
* @param {import('./types').CitationFormat} citationFormat
* @return {[string, string]}
*/
const genCitation = (citeproc, mode, entries, citationIdRoot, citationId, citationPre, options, isComposite, citationFormat) => {
const {
inlineClass,
linkCitations
} = options;
const key = `${citationIdRoot}-${citationId}`;
const c = citeproc.processCitationCluster({
citationID: key,
citationItems: entries,
properties: mode === 'in-text' ? {
noteIndex: 0,
mode: isComposite ? 'composite' : ''
} : {
noteIndex: citationId,
mode: isComposite ? 'composite' : ''
}
}, citationPre.length > 0 ? citationPre : [], []);
// c = [ { bibchange: true, citation_errors: [] }, [ [ 0, '(1)', 'CITATION-1' ] ]]
const citationText = c[1].find(x => x[2] === key)[1];
const ids = `citation--${entries.map(x => x.id.toLowerCase()).join('--')}--${citationId}`;
if (mode === 'note') {
// Use cite-fn-{id} to denote footnote from citation, will clean it up later to follow gfm "user-content" format
return [citationText, htmlToHast(`${citationId} `)];
} else if (linkCitations && citationFormat === 'numeric') {
// e.g. [1, 2]
let i = 0;
const refIds = entries.map(e => e.id);
const output = citationText.replace(/\d+/g, function (d) {
const url = `${d} `;
i++;
return url;
});
return [citationText, htmlToHast(`${output} `)];
} else if (linkCitations && citationFormat === 'author-date') {
// E.g. (see Nash, 1950, pp. 12–13, 1951); (Nash, 1950; Xie, 2016)
if (entries.length === 1) {
// Do not link bracket
const output = isComposite ? `${citationText} ` : `${citationText.slice(0, 1)}${citationText.slice(1, -1)} ${citationText.slice(-1)}`;
return [citationText, htmlToHast(`${output} `)];
} else {
// Retrieve the items in the correct order and attach link each of them
const refIds = entries.map(e => e.id);
const results = getSortedRelevantRegistryItems(citeproc, refIds, citeproc.opt.sort_citations);
const output = [];
let str = citationText;
for (const [i, item] of results.entries()) {
// Need to compare author. If same just match on date.
const id = item.id;
let citeMatch = item.ambig;
// If author is the same as the previous, some styles like apa collapse the author
if (i > 0 && isSameAuthor(results[i - 1], item) && str.indexOf(citeMatch) === -1) {
// Just match on year
citeMatch = item.ref.issued.year.toString();
}
const startPos = str.indexOf(citeMatch);
const [start, rest] = split(str, startPos);
output.push(start); // Irrelevant parts
const url = `${rest.substring(0, citeMatch.length)} `;
output.push(url);
str = rest.substr(citeMatch.length);
}
output.push(str);
return [citationText, htmlToHast(`${output.join('')} `)];
}
} else {
return [citationText, htmlToHast(`${citationText} `)];
}
};
/**
* Generate bibliography in html and convert it to hast
*
* @param {*} citeproc
*/
const genBiblioNode = citeproc => {
const [params, bibBody] = citeproc.makeBibliography();
const bibliography = '
\n' + bibBody.join('') + '
';
const biblioNode = htmlToHast(bibliography);
// Add citekey id to each bibliography entry.
biblioNode.children.filter(node => {
var _node$properties;
return (_node$properties = node.properties) == null || (_node$properties = _node$properties.className) == null ? void 0 : _node$properties.includes('csl-entry');
}).forEach((node, i) => {
const citekey = params.entry_ids[i][0].toLowerCase();
node.properties = node.properties || {};
node.properties.id = 'bib-' + citekey;
});
return biblioNode;
};
/**
* @typedef {import('hast').Element} Element
* @typedef {import('hast').ElementContent} ElementContent
*/
/**
* Create new footnote section node based on footnoteArray mappings
*
* @param {{int: string}} citationDict
* @param {{type: 'citation' | 'existing', oldId: string}[]} footnoteArray
* @param {Element | undefined} footnoteSection
* @return {Element}
*/
const genFootnoteSection = (citationDict, footnoteArray, footnoteSection) => {
/** @type {Element} */
const list = {
type: 'element',
tagName: 'ol',
properties: {},
children: [{
type: 'text',
value: '\n'
}]
};
let oldFootnoteList;
if (footnoteSection) {
/** @type {Element} */ // @ts-ignore - for some reason, the type does not narrow even after filtering
oldFootnoteList = footnoteSection.children.filter(n => n.type == "element").find(n => n.tagName === 'ol');
}
for (const [idx, item] of footnoteArray.entries()) {
const {
type,
oldId
} = item;
if (type === 'citation') {
list.children.push({
type: 'element',
tagName: 'li',
properties: {
id: `user-content-fn-${idx + 1}`
},
children: [{
type: 'element',
tagName: 'p',
properties: {},
children: [htmlToHast(`${citationDict[oldId]} `), {
type: 'element',
tagName: 'a',
properties: {
href: `#user-content-fnref-${idx + 1}`,
dataFootnoteBackref: true,
className: ['data-footnote-backref'],
ariaLabel: 'Back to content'
},
children: [{
type: 'text',
value: '↩'
}]
}]
}, {
type: 'text',
value: '\n'
}]
});
} else if (type === 'existing') {
// @ts-ignore
const liNode = oldFootnoteList.children.find(n => n.tagName === 'li' && n.properties.id === `user-content-fn-${oldId}`);
liNode.properties.id = `user-content-fn-${idx + 1}`;
const aNode = liNode.children[1].children.find(n => n.tagName === 'a');
aNode.properties.href = `#user-content-fnref-${idx + 1}`;
list.children.push(liNode);
}
}
/** @type {Element} */
const newfootnoteSection = {
type: 'element',
tagName: 'section',
properties: {
dataFootnotes: true,
className: ['footnotes']
},
children: [{
type: 'element',
tagName: 'h2',
properties: {
className: ['sr-only'],
id: 'footnote-label'
},
children: [{
type: 'text',
value: 'Footnotes'
}]
}, {
type: 'text',
value: '\n'
}, list]
};
return newfootnoteSection;
};
const defaultCiteFormat = 'apa';
const permittedTags = ['div', 'p', 'span', 'li', 'td', 'th'];
const idRoot = 'CITATION';
/**
* Rehype plugin that formats citations in markdown documents and insert bibliography in html format
*
* [-@wadler1990] --> (1990)
* [@hughes1989, sec 3.4] --> (Hughes 1989, sec 3.4)
* [see @wadler1990; and @hughes1989, pp. 4] --> (see Wadler 1990 and Hughes 1989, pp. 4)
*
* @param {*} Cite cite object from citation-js configured with the required CSLs
* @return {import('unified').Plugin<[Options?], Root>}
*/
const rehypeCitationGenerator = Cite => {
return (options = {}) => {
return async (tree, file) => {
var _file$data, _options$inlineBibCla;
/** @type {string[]} */
let bibtexFile = [];
/** @type {string} */ // @ts-ignore
const inputCiteformat = options.csl || (file == null || (_file$data = file.data) == null || (_file$data = _file$data.frontmatter) == null ? void 0 : _file$data.csl) || defaultCiteFormat;
const inputLang = options.lang || 'en-US';
const config = Cite.plugins.config.get('@csl');
const citeFormat = await loadCSL(Cite, inputCiteformat, options.path);
const lang = await loadLocale(Cite, inputLang, options.path);
let bibliography = await getBibliography(options, file);
if (bibliography.length === 0) {
return;
}
for (let i = 0; i < bibliography.length; i++) {
if (isValidHttpUrl(bibliography[i])) {
const response = await fetch$3(bibliography[i]);
bibtexFile.push(await response.text());
} else {
{
bibtexFile.push(await readFile(bibliography[i]));
}
}
}
const citations = new Cite(bibtexFile);
const citationIds = citations.data.map(x => x.id);
const citationPre = [];
const citationDict = {};
let citationId = 1;
const citeproc = config.engine(citations.data, citeFormat, lang, 'html');
/** @type {Mode} */
const mode = citeproc.opt.xclass;
const citationFormat = getCitationFormat(citeproc);
visit(tree, 'text', (node, idx, parent) => {
const match = node.value.match(citationRE);
if (!match || 'tagName' in parent && !permittedTags.includes(parent.tagName)) return;
let citeStartIdx = match.index;
let citeEndIdx = match.index + match[0].length;
// If we have an in-text citation and we should suppress the author, the
// match.index does NOT include the positive lookbehind, so we have to manually
// shift "from" to one before.
if (match[2] !== undefined) {
citeStartIdx--;
}
const newChildren = [];
// if preceding string
if (citeStartIdx !== 0) {
// create a new child node
newChildren.push({
type: 'text',
value: node.value.slice(0, citeStartIdx)
});
}
const [entries, isComposite] = parseCitation(match);
// If id is not in citation file (e.g. route alias or js package), abort process
for (const citeItem of entries) {
if (!citationIds.includes(citeItem.id)) return;
}
const [citedText, citedTextNode] = genCitation(citeproc, mode, entries, idRoot, citationId, citationPre, options, isComposite, citationFormat);
citationDict[citationId] = citedText;
// Prepare citationPre and citationId for the next cite instance
citationPre.push([`${idRoot}-${citationId}`, 0]);
citationId = citationId + 1;
newChildren.push(citedTextNode);
// if trailing string
if (citeEndIdx < node.value.length) {
newChildren.push({
type: 'text',
value: node.value.slice(citeEndIdx)
});
}
// insert into the parent
// @ts-ignore
parent.children = [...parent.children.slice(0, idx), ...newChildren, ...parent.children.slice(idx + 1)];
});
if (options.noCite) {
citeproc.updateItems(options.noCite.map(x => x.replace('@', '')));
}
if (citeproc.registry.mylist.length >= 1 && (!options.suppressBibliography || ((_options$inlineBibCla = options.inlineBibClass) == null ? void 0 : _options$inlineBibCla.length) > 0)) {
const biblioNode = genBiblioNode(citeproc);
let bilioInserted = false;
const biblioMap = {};
biblioNode.children.filter(node => {
var _node$properties;
return (_node$properties = node.properties) == null || (_node$properties = _node$properties.className) == null ? void 0 : _node$properties.includes('csl-entry');
}).forEach(node => {
const citekey = node.properties.id.split('-').slice(1).join('-');
biblioMap[citekey] = _extends({}, node);
biblioMap[citekey].properties = {
id: 'inlinebib-' + citekey
};
});
// Insert it at ^ref, if not found insert it as the last element of the tree
visit(tree, 'element', (node, idx, parent) => {
var _options$inlineBibCla2, _node$properties2;
// Add inline bibliography
if (((_options$inlineBibCla2 = options.inlineBibClass) == null ? void 0 : _options$inlineBibCla2.length) > 0 && (_node$properties2 = node.properties) != null && (_node$properties2 = _node$properties2.id) != null && _node$properties2.toString().startsWith('citation-')) {
// id is citation--nash1951--nash1950--1
const [, ...citekeys] = node.properties.id.toString().split('--');
const citationID = citekeys.pop();
/** @type {Element} */
const inlineBibNode = {
type: 'element',
tagName: 'div',
properties: {
className: options.inlineBibClass,
id: `inlineBib--${citekeys.join('--')}--${citationID}`
},
children: citekeys.map(citekey => {
const aBibNode = biblioMap[citekey];
aBibNode.properties = {
class: 'inline-entry',
id: `inline--${citekey}--${citationID}`
};
return aBibNode;
})
};
parent.children.push(inlineBibNode);
}
// Add bibliography
if (!options.suppressBibliography && (node.tagName === 'p' || node.tagName === 'div') && node.children.length >= 1 && node.children[0].type === 'text' && node.children[0].value === '[^ref]') {
parent.children[idx] = biblioNode;
bilioInserted = true;
}
});
if (!options.suppressBibliography && !bilioInserted) {
tree.children.push(biblioNode);
}
}
let footnoteSection;
visit(tree, 'element', (node, index, parent) => {
if (node.tagName === 'section' && node.properties.dataFootnotes) {
footnoteSection = node;
parent.children.splice(index, 1);
}
});
// Need to adjust footnote numbering based on existing ones already assigned
// And insert them into the footnote section (if exists)
// Footnote comes after bibliography
if (mode === 'note' && Object.keys(citationDict).length > 0) {
/** @type {{type: 'citation' | 'existing', oldId: string}[]} */
let fnArray = [];
let index = 1;
visit(tree, 'element', node => {
if (node.tagName === 'sup' && node.children[0].type === 'element') {
let nextNode = node.children[0];
if (nextNode.tagName === 'a') {
/** @type {{href: string, id: string}} */ // @ts-ignore
const {
href,
id
} = nextNode.properties;
if (href.includes('fn') && id.includes('fnref')) {
const oldId = href.split('-').pop();
fnArray.push({
type: href.includes('cite') ? 'citation' : 'existing',
oldId
});
// Update ref number
nextNode.properties.href = `#user-content-fn-${index}`;
nextNode.properties.id = `user-content-fnref-${index}`;
// @ts-ignore
nextNode.children[0].value = index.toString();
index += 1;
}
}
}
});
// @ts-ignore
const newFootnoteSection = genFootnoteSection(citationDict, fnArray, footnoteSection);
tree.children.push(newFootnoteSection);
} else {
if (footnoteSection) tree.children.push(footnoteSection);
}
};
};
};
// @ts-nocheck
/**
* @memberof module: @citation-js / core.Cite#
*
* @return {Number} The latest version of the object
*/
function currentVersion() {
return this.log.length;
}
/**
* Returns an image of the object in the version specified.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {Number} [versnum=1] - The number of the version you want to retrieve. Illegal numbers: numbers under or equal to zero, floats, numbers above the current version of the object.
*
* @return {module:@citation-js/core.Cite} The version of the object with the version number passed. `undefined` if an illegal number is passed.
*/
function retrieveVersion(versnum = 1) {
if (versnum <= 0 || versnum > this.currentVersion()) {
return null;
} else {
const [data, options] = this.log[versnum - 1];
const image = new this.constructor(JSON.parse(data), JSON.parse(options));
image.log = this.log.slice(0, versnum);
return image;
}
}
/**
* Returns the second to last saved image of the object.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {Number} [number=1] - number of versions to go back.
*
* @return {module:@citation-js/core.Cite} The second to last version of the object. `undefined` if used on first version.
*/
function undo(number = 1) {
return this.retrieveVersion(this.currentVersion() - number);
}
/**
* Returns the last saved image of the object.
*
* @memberof module:@citation-js/core.Cite#
*
* @return {module:@citation-js/core.Cite} The last version of the object. `undefined` if used on first version.
*/
function retrieveLastVersion() {
return this.retrieveVersion(this.currentVersion());
}
/**
* Save an image of the current version of the object.
*
* @memberof module:@citation-js/core.Cite#
*
* @return {module:@citation-js/core.Cite} The current version of the object.
*/
function save() {
this.log.push([JSON.stringify(this.data), JSON.stringify(this._options)]);
return this;
}
var log = {
__proto__: null,
currentVersion: currentVersion,
retrieveVersion: retrieveVersion,
retrieveLastVersion: retrieveLastVersion,
undo: undo,
save: save
};
// @ts-nocheck
const formats$4 = ['real', 'string'];
const types$1 = ['json', 'html', 'string', 'rtf'];
const styles = ['csl', 'bibtex', 'bibtxt', 'citation-*', 'ris', 'ndjson'];
const wrapperTypes = ['string', 'function'];
/**
* @access public
* @method validateOutputOptions
* @memberof module:@citation-js/core.Cite
*
* @deprecated
* @param {module:@citation-js/core~OutputOptions} - options
*
* @return {Boolean} true (if valid)
* @throws {TypeError} Options not an object
* @throws {TypeError} Invalid options
* @throws {Error} Invalid options combination
*
* @todo check registers if styles and langs are present
*/
/* istanbul ignore next: deprecated */
function validateOutputOptions(options) {
if (typeof options !== 'object') {
throw new TypeError('Options not an object!');
}
const {
format,
type,
style,
lang,
append,
prepend
} = options;
if (format && !formats$4.includes(format)) {
throw new TypeError(`Option format ("${format}") should be one of: ${formats$4}`);
} else if (type && !types$1.includes(type)) {
throw new TypeError(`Option type ("${type}") should be one of: ${types$1}`);
} else if (style && !styles.includes(style) && !/^citation/.test(style)) {
throw new TypeError(`Option style ("${style}") should be one of: ${styles}`);
} else if (lang && typeof lang !== 'string') {
throw new TypeError(`Option lang should be a string, but is a ${typeof lang}`);
} else if (prepend && !wrapperTypes.includes(typeof prepend)) {
throw new TypeError(`Option prepend should be a string or a function, but is a ${typeof prepend}`);
} else if (append && !wrapperTypes.includes(typeof append)) {
throw new TypeError(`Option append should be a string or a function, but is a ${typeof append}`);
}
if (/^citation/.test(style) && type === 'json') {
throw new Error(`Combination type/style of json/citation-* is not valid: ${type}/${style}`);
}
return true;
}
/**
* @access public
* @method valdiateOptions
* @memberof module:@citation-js/core.Cite
*
* @param {module:@citation-js/core~InputOptions} - options
*
* @return {Boolean} true (if valid)
* @throws {TypeError} Options not an object
* @throws {TypeError} Invalid options
*
* @todo check registers if type is present
*/
function validateOptions(options) {
if (typeof options !== 'object') {
throw new TypeError('Options should be an object');
}
/* istanbul ignore if: deprecated */
if (options.output) {
validateOutputOptions(options.output);
} else if (options.maxChainLength && typeof options.maxChainLength !== 'number') {
throw new TypeError('Option maxChainLength should be a number');
} else if (options.forceType && typeof options.forceType !== 'string') {
throw new TypeError('Option forceType should be a string');
} else if (options.generateGraph != null && typeof options.generateGraph !== 'boolean') {
throw new TypeError('Option generateGraph should be a boolean');
} else if (options.strict != null && typeof options.strict !== 'boolean') {
throw new TypeError('Option strict should be a boolean');
} else if (options.target != null && typeof options.target !== 'string') {
throw new TypeError('Option target should be a boolean');
}
return true;
}
/**
* @memberof module:@citation-js/core.Cite#
*
* @constant {module:@citation-js/core~OutputOptions} defaultOptions - default output options
*/
const defaultOptions = {
format: 'real',
type: 'json',
style: 'csl',
lang: 'en-US'
};
/**
* Change the default options of a `Cite` object.
*
* @memberof Cite#
*
* @param {module:@citation-js/core~OutputOptions} options - The options for the output
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated parent object
*/
function options(options, log) {
validateOutputOptions(options);
if (log) {
this.save();
}
Object.assign(this._options, options);
return this;
}
var options$1 = {
__proto__: null,
options: options,
defaultOptions: defaultOptions
};
/**
* Gets the constructor name, with a special case for `null` and `undefined`
*
* @access public
* @method typeOf
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {*} thing - input data or anything else
*
* @return {String} type
*/
function typeOf(thing) {
switch (thing) {
case undefined:
return 'Undefined';
case null:
return 'Null';
default:
return thing.constructor.name;
}
}
/**
* @access public
* @method dataTypeOf
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {*} thing - input data or anything else
*
* @return {module:@citation-js/core.plugins.input~dataType} dataType
*/
function dataTypeOf(thing) {
switch (typeof thing) {
case 'string':
return 'String';
case 'object':
if (Array.isArray(thing)) {
return 'Array';
} else if (typeOf(thing) === 'Object') {
return 'SimpleObject';
} else if (typeOf(thing) !== 'Null') {
return 'ComplexObject';
}
// fall through when thing === null, return default value
default:
return 'Primitive';
}
}
var dataType = {
__proto__: null,
typeOf: typeOf,
dataTypeOf: dataTypeOf
};
/**
* Apply a parse chain graph to an element
*
* @access protected
* @method applyGraph
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {module:@citation-js/core~CSL} entry
* @param {Array} graph
*
* @return {module:@citation-js/core~CSL} entry
*/
function applyGraph(entry, graph) {
if (entry._graph) {
const index = graph.findIndex(({
type
}) => type === '@else/list+object');
if (index !== -1) {
graph.splice(index + 1, 0, ...entry._graph.slice(0, -1));
}
}
entry._graph = graph;
return entry;
}
/**
* Remove the parse chain graph from an element
*
* @access protected
* @method removeGraph
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {module:@citation-js/core~CSL} entry
*
* @return {module:@citation-js/core~CSL} entry
*/
function removeGraph(entry) {
delete entry._graph;
return entry;
}
var graph = {
__proto__: null,
applyGraph: applyGraph,
removeGraph: removeGraph
};
/**
* @memberof module:@citation-js/core
* @var {Object} logger
* @property _output
* @property {Console} _console
* @property {Array} _log
* @property {Array} _levels
* @property {module:@citation-js/core~logLevel} level
*/
const logger = {
_output(level, scope, msg) {
this._log.push(scope, msg);
if (this._levels.indexOf(level) < this._levels.indexOf(this.level)) {
return;
}
this._console.log(scope, ...msg);
},
_console: null,
_log: [],
/**
* @typedef {String} module:@citation-js/core~logLevel
*/
_levels: ['http', 'debug', 'unmapped', 'info', 'warn', 'error', 'silent'],
level: 'silent'
};
for (const level of logger._levels) {
logger[level] = (scope, ...msg) => logger._output(level, scope, msg);
}
if (typeof console.Console === 'function') {
logger._console = new console.Console(process.stderr);
} else {
logger._console = console;
}
// @ts-nocheck
// register
const types = {};
const dataTypes = {};
// extensions not registered as such
const unregExts = {};
/**
* Hard-coded, for reasons
*
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input
* @param {module:@citation-js/core.plugins.input~dataType} dataType
* @return {module:@citation-js/core.plugins.input~format} native format
*/
function parseNativeTypes(input, dataType) {
switch (dataType) {
case 'Array':
if (input.length === 0 || input.every(entry => type(entry) === '@csl/object')) {
return '@csl/list+object';
} else {
return '@else/list+object';
}
case 'SimpleObject':
case 'ComplexObject':
// might, of course, be something completely else, but this is how the parser works
return '@csl/object';
default:
return '@invalid';
}
}
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @param {Array} [typeList=[]]
* @param {module:@citation-js/core~InputData} data
*
* @return {module:@citation-js/core.plugins.input~format} native format
*/
function matchType(typeList = [], data) {
for (const type of typeList) {
if (types[type].predicate(data)) {
return matchType(types[type].extensions, data) || type;
}
}
}
/**
* @access public
* @method type
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input
*
* @return {module:@citation-js/core.plugins.input~format} type
*/
function type(input) {
const dataType = dataTypeOf(input);
// Empty array should be @csl/list+object too
if (dataType === 'Array' && input.length === 0) {
// Off-load to parseNativeTypes() to not repeat the name
// '@csl/list+object' here as well, as it might change
return parseNativeTypes(input, dataType);
}
const match = matchType(dataTypes[dataType], input);
// If no matching formats found, test if native format,
// else invalid input.
return match || parseNativeTypes(input, dataType);
}
/**
* @access public
* @method addTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format
* @param {module:@citation-js/core.plugins.input.util.TypeParser} typeParser
*/
function addTypeParser(format, {
dataType,
predicate,
extends: extend
}) {
// 1. check if any subclass formats are waiting for this format
let extensions = [];
if (format in unregExts) {
extensions = unregExts[format];
delete unregExts[format];
logger.debug('[core]', `Subclasses "${extensions}" finally registered to parent type "${format}"`);
}
// 2. create object with parser info
const object = {
predicate,
extensions
};
types[format] = object;
// 3. determine which type lists the type should be added to
if (extend) {
// 3.1. if format is subclass, check if parent type is registered
const parentTypeParser = types[extend];
if (parentTypeParser) {
// 3.1.1. if it is, add the type parser
parentTypeParser.extensions.push(format);
} else {
// 3.1.2. if it isn't, register type as waiting
if (!unregExts[extend]) {
unregExts[extend] = [];
}
unregExts[extend].push(format);
logger.debug('[core]', `Subclass "${format}" is waiting on parent type "${extend}"`);
}
} else {
// 3.2. else, add
const typeList = dataTypes[dataType] || (dataTypes[dataType] = []);
typeList.push(format);
}
}
/**
* @access public
* @method hasTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} type
*
* @return {Boolean} type parser is registered
*/
function hasTypeParser(type) {
return Object.prototype.hasOwnProperty.call(types, type);
}
/**
* @access public
* @method removeTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} type
*/
function removeTypeParser(type) {
delete types[type];
// Removing orphaned type refs
const typeLists = [...Object.keys(dataTypes).map(key => dataTypes[key]), ...Object.keys(types).map(type => types[type].extensions).filter(list => list.length > 0)];
typeLists.forEach(typeList => {
const index = typeList.indexOf(type);
if (index > -1) {
typeList.splice(index, 1);
}
});
}
/**
* @access public
* @method listTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @return {Array} list of registered type parsers
*/
function listTypeParser() {
return Object.keys(types);
}
/**
* @access public
* @method treeTypeParser
* @memberof module:@citation-js/core.plugins.input
*
* @return {Object} tree structure
*/
/* istanbul ignore next: debugging */
function treeTypeParser() {
const attachNode = name => ({
name,
children: types[name].extensions.map(attachNode)
});
return {
name: 'Type tree',
children: Object.keys(dataTypes).map(name => ({
name,
children: dataTypes[name].map(attachNode)
}))
};
}
/**
* Validate and parse the format name
*
* @access public
* @method typeMatcher
* @memberof module:@citation-js/core.plugins.input
* @type {RegExp}
*/
const typeMatcher = /^(?:@(.+?))(?:\/(?:(.+?)\+)?(?:(.+)))?$/;
// @ts-nocheck
/**
* @memberof module:@citation-js/core.plugins.input.util
* @param {module:@citation-js/core.plugins.input~typeParser} data
*/
class TypeParser {
constructor(data) {
/**
* @access protected
* @type {Array}
*/
this.validDataTypes = ['String', 'Array', 'SimpleObject', 'ComplexObject', 'Primitive'];
this.data = data;
}
// ==========================================================================
// Validation
// ==========================================================================
/**
* @access protected
* @throws {RangeError} if dataType is not valid
*/
validateDataType() {
const dataType = this.data.dataType;
if (dataType && !this.validDataTypes.includes(dataType)) {
throw new RangeError(`dataType was ${dataType}; expected one of ${this.validDataTypes}`);
}
}
/**
* @access protected
* @throws {TypeError} if predicate is not valid
*/
validateParseType() {
const predicate = this.data.predicate;
if (predicate && !(predicate instanceof RegExp || typeof predicate === 'function')) {
throw new TypeError(`predicate was ${typeof predicate}; expected RegExp or function`);
}
}
/**
* @access protected
* @throws {TypeError} if predicate is not valid
*/
validateTokenList() {
const tokenList = this.data.tokenList;
if (tokenList && typeof tokenList !== 'object') {
throw new TypeError(`tokenList was ${typeof tokenList}; expected object or RegExp`);
}
}
/**
* @access protected
* @throws {TypeError} if propertyConstraint is not valid
*/
validatePropertyConstraint() {
const propertyConstraint = this.data.propertyConstraint;
if (propertyConstraint && typeof propertyConstraint !== 'object') {
throw new TypeError(`propertyConstraint was ${typeof propertyConstraint}; expected array or object`);
}
}
/**
* @access protected
* @throws {TypeError} if elementConstraint is not valid
*/
validateElementConstraint() {
const elementConstraint = this.data.elementConstraint;
if (elementConstraint && typeof elementConstraint !== 'string') {
throw new TypeError(`elementConstraint was ${typeof elementConstraint}; expected string`);
}
}
/**
* @access protected
* @throws {TypeError} if extends is not valid
*/
validateExtends() {
const extend = this.data.extends;
if (extend && typeof extend !== 'string') {
throw new TypeError(`extends was ${typeof extend}; expected string`);
}
}
/**
* @access public
* @throws {TypeError|RangeError} if typeParser is not valid
*/
validate() {
if (this.data === null || typeof this.data !== 'object') {
throw new TypeError(`typeParser was ${typeof this.data}; expected object`);
}
this.validateDataType();
this.validateParseType();
this.validateTokenList();
this.validatePropertyConstraint();
this.validateElementConstraint();
this.validateExtends();
}
// ==========================================================================
// Simplification helpers
// ==========================================================================
/**
* @access protected
* @return {Array}
*/
parseTokenList() {
let tokenList = this.data.tokenList;
if (!tokenList) {
return [];
} else if (tokenList instanceof RegExp) {
tokenList = {
token: tokenList
};
}
const {
token,
split = /\s+/,
trim = true,
every = true
} = tokenList;
const trimInput = input => trim ? input.trim() : input;
const testTokens = every ? 'every' : 'some';
const predicate = input => trimInput(input).split(split)[testTokens](part => token.test(part));
return [predicate];
}
/**
* @access protected
* @return {Array}
*/
parsePropertyConstraint() {
const constraints = [].concat(this.data.propertyConstraint || []);
return constraints.map(({
props,
match,
value
}) => {
props = [].concat(props);
switch (match) {
case 'any': // fall-through
case 'some':
return input => props.some(prop => prop in input && (!value || value(input[prop])));
case 'none':
return input => !props.some(prop => prop in input && (!value || value(input[prop])));
case 'every': // fall-through
default:
return input => props.every(prop => prop in input && (!value || value(input[prop])));
}
});
}
/**
* @access protected
* @return {Array}
*/
parseElementConstraint() {
const constraint = this.data.elementConstraint;
return !constraint ? [] : [input => input.every(entry => type(entry) === constraint)];
}
/**
* @access protected
* @return {Array}
*/
parsePredicate() {
if (this.data.predicate instanceof RegExp) {
return [this.data.predicate.test.bind(this.data.predicate)];
} else if (this.data.predicate) {
return [this.data.predicate];
} else {
return [];
}
}
/**
* @access protected
* @return {module:@citation-js/core.plugins.input~predicate}
*/
getCombinedPredicate() {
const predicates = [...this.parsePredicate(), ...this.parseTokenList(), ...this.parsePropertyConstraint(), ...this.parseElementConstraint()];
if (predicates.length === 0) {
return () => true;
} else if (predicates.length === 1) {
return predicates[0];
} else {
return input => predicates.every(predicate => predicate(input));
}
}
/**
* @access protected
* @return {module:@citation-js/core.plugins.input~dataType}
*/
getDataType() {
if (this.data.dataType) {
return this.data.dataType;
} else if (this.data.predicate instanceof RegExp) {
return 'String';
} else if (this.data.tokenList) {
return 'String';
} else if (this.data.elementConstraint) {
return 'Array';
} else {
return 'Primitive';
}
}
// ==========================================================================
// Data simplification
// ==========================================================================
/**
* @type {module:@citation-js/core.plugins.input~dataType}
*/
get dataType() {
return this.getDataType();
}
/**
* @type {module:@citation-js/core.plugins.input~predicate}
*/
get predicate() {
return this.getCombinedPredicate();
}
/**
* @type {module:@citation-js/core.plugins.input~format}
*/
get extends() {
return this.data.extends;
}
}
/**
* @memberof module:@citation-js/core.plugins.input.util
* @param {module:@citation-js/core.plugins.input~dataParser|module:@citation-js/core.plugins.input~asyncDataParser} parser
* @param {Object} options
* @param {Boolean} [options.async=false]
*/
class DataParser {
constructor(parser, {
async
} = {}) {
this.parser = parser;
this.async = async;
}
// ==========================================================================
// Validation
// ==========================================================================
/**
* @throws {TypeError} if dataParser is not valid
*/
validate() {
const parser = this.parser;
if (typeof parser !== 'function') {
throw new TypeError(`parser was ${typeof parser}; expected function`);
}
}
}
/**
* @memberof module:@citation-js/core.plugins.input.util
* @param {module:@citation-js/core.plugins.input~format} format
* @param {module:@citation-js/core.plugins.input~parsers} parsers
*/
class FormatParser {
constructor(format, parsers = {}) {
this.format = format;
if (parsers.parseType) {
this.typeParser = new TypeParser(parsers.parseType);
}
if (parsers.parse) {
this.dataParser = new DataParser(parsers.parse, {
async: false
});
}
if (parsers.parseAsync) {
this.asyncDataParser = new DataParser(parsers.parseAsync, {
async: true
});
}
}
// ==========================================================================
// Validation
// ==========================================================================
/**
* @access protected
* @throws {TypeError} if format is not valid
*/
validateFormat() {
const format = this.format;
if (!typeMatcher.test(format)) {
throw new TypeError(`format name was "${format}"; didn't match expected pattern`);
}
}
/**
* @throws {TypeError} if formatParser is not valid
*/
validate() {
this.validateFormat();
if (this.typeParser) {
this.typeParser.validate();
}
if (this.dataParser) {
this.dataParser.validate();
}
if (this.asyncDataParser) {
this.asyncDataParser.validate();
}
}
}
var parser = {
__proto__: null,
TypeParser: TypeParser,
DataParser: DataParser,
FormatParser: FormatParser
};
const NAME = 1;
const NAME_LIST = 2;
const DATE = 3;
const TYPE$3 = 4;
/**
* Data from https://github.com/citation-style-language/schema/blob/master/schemas/input/csl-data.json
*
* - true if a valid type
* - string if another type should be used
*
* @access private
* @constant entryTypes
* @memberof module:@citation-js/core.plugins.input
*/
const entryTypes = {
article: true,
'article-journal': true,
'article-magazine': true,
'article-newspaper': true,
bill: true,
book: true,
broadcast: true,
chapter: true,
classic: true,
collection: true,
dataset: true,
document: true,
entry: true,
'entry-dictionary': true,
'entry-encyclopedia': true,
event: true,
figure: true,
graphic: true,
hearing: true,
interview: true,
legal_case: true,
legislation: true,
manuscript: true,
map: true,
motion_picture: true,
musical_score: true,
pamphlet: true,
'paper-conference': true,
patent: true,
performance: true,
periodical: true,
personal_communication: true,
post: true,
'post-weblog': true,
regulation: true,
report: true,
review: true,
'review-book': true,
software: true,
song: true,
speech: true,
standard: true,
thesis: true,
treaty: true,
webpage: true,
// From https://github.com/CrossRef/rest-api-doc/issues/187
'journal-article': 'article-journal',
'book-chapter': 'chapter',
'posted-content': 'manuscript',
'proceedings-article': 'paper-conference'
};
/**
* Object containing type info on CSL-JSON fields.
*
* * string: primitive value type
* * array: list of primitive value types
* * number: special type
*
* Data from https://github.com/citation-style-language/schema/blob/master/csl-data.json
*
* @access private
* @constant fieldTypes
* @memberof module:@citation-js/core.plugins.input
*/
const fieldTypes$2 = {
author: NAME_LIST,
chair: NAME_LIST,
'collection-editor': NAME_LIST,
compiler: NAME_LIST,
composer: NAME_LIST,
'container-author': NAME_LIST,
contributor: NAME_LIST,
curator: NAME_LIST,
director: NAME_LIST,
editor: NAME_LIST,
'editorial-director': NAME_LIST,
'executive-producer': NAME_LIST,
guest: NAME_LIST,
host: NAME_LIST,
interviewer: NAME_LIST,
illustrator: NAME_LIST,
narrator: NAME_LIST,
organizer: NAME_LIST,
'original-author': NAME_LIST,
performer: NAME_LIST,
producer: NAME_LIST,
'reviewed-author': NAME_LIST,
recipient: NAME_LIST,
'script-writer': NAME_LIST,
'series-creator': NAME_LIST,
translator: NAME_LIST,
accessed: DATE,
'available-date': DATE,
container: DATE,
'event-date': DATE,
issued: DATE,
'original-date': DATE,
submitted: DATE,
type: TYPE$3,
categories: 'object',
// TODO Array
custom: 'object',
id: ['string', 'number'],
language: 'string',
journalAbbreviation: 'string',
shortTitle: 'string',
abstract: 'string',
annote: 'string',
archive: 'string',
archive_collection: 'string',
archive_location: 'string',
'archive-place': 'string',
authority: 'string',
'call-number': 'string',
'chapter-number': 'string',
'citation-number': 'string',
'citation-key': 'string',
'citation-label': 'string',
'collection-number': 'string',
'collection-title': 'string',
'container-title': 'string',
'container-title-short': 'string',
dimensions: 'string',
division: 'string',
DOI: 'string',
edition: ['string', 'number'],
event: 'string',
// deprecated
'event-title': 'string',
'event-place': 'string',
'first-reference-note-number': 'string',
genre: 'string',
ISBN: 'string',
ISSN: 'string',
issue: ['string', 'number'],
jurisdiction: 'string',
keyword: 'string',
locator: 'string',
medium: 'string',
note: 'string',
number: ['string', 'number'],
'number-of-pages': 'string',
'number-of-volumes': ['string', 'number'],
'original-publisher': 'string',
'original-publisher-place': 'string',
'original-title': 'string',
page: 'string',
'page-first': 'string',
'part-number': ['string', 'number'],
'part-title': 'string',
PMCID: 'string',
PMID: 'string',
printing: 'string',
publisher: 'string',
'publisher-place': 'string',
references: 'string',
'reviewed-title': 'string',
'reviewed-genre': 'string',
scale: 'string',
section: 'string',
source: 'string',
status: 'string',
supplement: ['string', 'number'],
title: 'string',
'title-short': 'string',
URL: 'string',
version: 'string',
volume: ['string', 'number'],
'volume-title': 'string',
'volume-title-short': 'string',
'year-suffix': 'string'
};
/**
* Correct a name.
*
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @param {*} name - name
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {Object} returns the (corrected) value if possible, otherwise undefined
*/
function correctName(name, bestGuessConversions) {
if (typeof name === 'object' && name !== null && (name.literal || name.given || name.family)) {
return name;
} else if (!bestGuessConversions) {
return undefined;
} else if (typeof name === 'string') {
return parse$8(name);
}
}
/**
* Correct a name field.
*
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @param {*} nameList - name list
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {Array|undefined} returns the (corrected) value if possible, otherwise undefined
*/
function correctNameList(nameList, bestGuessConversions) {
if (nameList instanceof Array) {
const names = nameList.map(name => correctName(name, bestGuessConversions)).filter(Boolean);
return names.length ? names : undefined;
}
}
/**
* Correct date parts
*
* @access private
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {Array} dateParts
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {Array|undefined}
*/
function correctDateParts(dateParts, bestGuessConversions) {
if (dateParts.every(part => typeof part === 'number')) {
return dateParts;
} else if (!bestGuessConversions || dateParts.some(part => isNaN(parseInt(part)))) {
return undefined;
} else {
return dateParts.map(part => parseInt(part));
}
}
/**
* Correct a date field.
*
* @access private
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {*} date - date
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {Array|undefined} returns the (corrected) value if possible, otherwise undefined
*/
function correctDate(date, bestGuessConversions) {
const dp = 'date-parts';
if (typeof date !== 'object' || date === null) {
return undefined;
// "{'date-parts': [[2000, 1, 1], ...]}"
} else if (date[dp] instanceof Array && date[dp].every(part => part instanceof Array)) {
const range = date[dp].map(dateParts => correctDateParts(dateParts, bestGuessConversions)).filter(Boolean);
return range.length ? _extends({}, date, {
'date-parts': range
}) : undefined;
// LEGACY support
// "[{'date-parts': [2000, 1, 1]}, ...]"
} else if (date instanceof Array && date.every(part => part[dp] instanceof Array)) {
const range = date.map(dateParts => correctDateParts(dateParts[dp], bestGuessConversions)).filter(Boolean);
return range.length ? {
'date-parts': range
} : undefined;
// LEGACY support
// "{'date-parts': [2000, 1, 1]}"
} else if (date[dp] instanceof Array) {
const dateParts = correctDateParts(date[dp], bestGuessConversions);
return dateParts && {
'date-parts': [dateParts]
};
// No separate date-parts
} else if ('literal' in date || 'raw' in date) {
return date;
}
}
/**
* Correct a type field.
*
* @access private
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {String|*} type - type
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {String|undefined} returns the (corrected) value if possible, otherwise undefined
*/
function correctType(type, bestGuessConversions) {
// Also anything that can be converted to a string. Taking `language` as a field
// with similar string constraints, as fields like `title` might take HTML into
// account in the future.
type = correctField('language', type, bestGuessConversions);
if (entryTypes[type] === true) {
return type;
} else if (bestGuessConversions && type in entryTypes) {
return entryTypes[type];
} else {
return undefined;
}
}
/**
* Correct a field.
*
* @access private
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {String} fieldName - field name
* @param {*} value - value
* @param {Boolean} bestGuessConversions - make some best guess conversions on type mismatch
*
* @return {*|undefined} returns the (corrected) value if possible, otherwise undefined
*/
function correctField(fieldName, value, bestGuessConversions) {
const fieldType = [].concat(fieldTypes$2[fieldName]);
switch (fieldTypes$2[fieldName]) {
/* istanbul ignore next: no field has this */
case NAME:
return correctName(value, bestGuessConversions);
case NAME_LIST:
return correctNameList(value, bestGuessConversions);
case DATE:
return correctDate(value, bestGuessConversions);
case TYPE$3:
return correctType(value, bestGuessConversions);
}
if (bestGuessConversions) {
if (typeof value === 'string' && fieldType.includes('number') && !fieldType.includes('string') && !isNaN(+value)) {
return parseFloat(value);
} else if (typeof value === 'number' && fieldType.includes('string') && !fieldType.includes('number')) {
return value.toString();
} else if (Array.isArray(value) && value.length) {
return correctField(fieldName, value[0], bestGuessConversions);
}
}
if (fieldType.includes(typeof value)) {
return value;
}
}
/**
* Make CSL JSON conform to standards so that plugins don't have to typecheck all the time.
*
* @access protected
* @method clean
* @memberof module:@citation-js/core.plugins.input.util
*
* @param {Array} data - Array of CSL
* @param {Boolean} [bestGuessConversions=true] - make some best guess conversions on type mismatch
*
* @return {Array} Array of clean CSL
*/
function parseCsl(data, bestGuessConversions = true) {
return data.map(function (entry) {
const clean = {};
for (const field in entry) {
const correction = correctField(field, entry[field], bestGuessConversions);
if (correction !== undefined) {
clean[field] = correction;
}
}
return clean;
});
}
var csl = {
__proto__: null,
clean: parseCsl
};
/**
* Upgrade CSL item from 1.0.1 to 1.0.2
*
* @method upgradeCsl
* @memberof module:@citation-js/core.util
*
* @param {Object} item - Input object
*
* @return {Object} upgraded item
*/
function upgradeCsl(item) {
if (Array.isArray(item)) {
return item.map(upgradeCsl);
}
item = _extends({}, item);
if ('event' in item) {
item['event-title'] = item.event;
delete item.event;
}
if (item.type === 'book' && 'version' in item) {
item.type = 'software';
}
return item;
}
/**
* Downgrade CSL item from 1.0.2 to 1.0.1
*
* @method downgradeCsl
* @memberof module:@citation-js/core.util
*
* @param {Object} item - Input object
*
* @return {Object} downgraded item
*/
function downgradeCsl(item) {
if (Array.isArray(item)) {
return item.map(downgradeCsl);
}
item = _extends({}, item);
if ('event-title' in item) {
item.event = item['event-title'];
delete item['event-title'];
}
if (item.type === 'software') {
item.type = 'book';
}
return item;
}
// @ts-nocheck
/**
* Duplicate objects to prevent Cite changing values outside of own scope
*
* @access protected
* @method deepCopy
* @memberof module:@citation-js/core.util
*
* @param {Object} obj - Input object
* @param {Set} [seen]
*
* @return {Object} Duplicated object
* @throws {TypeError}
*/
function deepCopy(value, seen = new Set()) {
if (typeof value !== 'object' || value === null || value.constructor !== Object && value.constructor !== Array) {
return value;
}
if (seen.has(value)) {
throw new TypeError('Recursively copying circular structure');
}
seen.add(value);
let copy;
if (value.constructor === Array) {
copy = value.map(value => deepCopy(value, seen));
} else {
const object = {};
for (const key in value) {
object[key] = deepCopy(value[key], seen);
}
copy = object;
}
seen.delete(value);
return copy;
}
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn) {
var module = { exports: {} };
return fn(module, module.exports), module.exports;
}
var conversions = {};
var lib$2 = conversions;
function sign(x) {
return x < 0 ? -1 : 1;
}
function evenRound(x) {
// Round x to the nearest integer, choosing the even integer if it lies halfway between two.
if (x % 1 === 0.5 && (x & 1) === 0) {
// [even number].5; round down (i.e. floor)
return Math.floor(x);
} else {
return Math.round(x);
}
}
function createNumberConversion(bitLength, typeOpts) {
if (!typeOpts.unsigned) {
--bitLength;
}
const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
const upperBound = Math.pow(2, bitLength) - 1;
const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);
const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);
return function (V, opts) {
if (!opts) opts = {};
let x = +V;
if (opts.enforceRange) {
if (!Number.isFinite(x)) {
throw new TypeError("Argument is not a finite number");
}
x = sign(x) * Math.floor(Math.abs(x));
if (x < lowerBound || x > upperBound) {
throw new TypeError("Argument is not in byte range");
}
return x;
}
if (!isNaN(x) && opts.clamp) {
x = evenRound(x);
if (x < lowerBound) x = lowerBound;
if (x > upperBound) x = upperBound;
return x;
}
if (!Number.isFinite(x) || x === 0) {
return 0;
}
x = sign(x) * Math.floor(Math.abs(x));
x = x % moduloVal;
if (!typeOpts.unsigned && x >= moduloBound) {
return x - moduloVal;
} else if (typeOpts.unsigned) {
if (x < 0) {
x += moduloVal;
} else if (x === -0) {
// don't return negative zero
return 0;
}
}
return x;
};
}
conversions["void"] = function () {
return undefined;
};
conversions["boolean"] = function (val) {
return !!val;
};
conversions["byte"] = createNumberConversion(8, {
unsigned: false
});
conversions["octet"] = createNumberConversion(8, {
unsigned: true
});
conversions["short"] = createNumberConversion(16, {
unsigned: false
});
conversions["unsigned short"] = createNumberConversion(16, {
unsigned: true
});
conversions["long"] = createNumberConversion(32, {
unsigned: false
});
conversions["unsigned long"] = createNumberConversion(32, {
unsigned: true
});
conversions["long long"] = createNumberConversion(32, {
unsigned: false,
moduloBitLength: 64
});
conversions["unsigned long long"] = createNumberConversion(32, {
unsigned: true,
moduloBitLength: 64
});
conversions["double"] = function (V) {
const x = +V;
if (!Number.isFinite(x)) {
throw new TypeError("Argument is not a finite floating-point value");
}
return x;
};
conversions["unrestricted double"] = function (V) {
const x = +V;
if (isNaN(x)) {
throw new TypeError("Argument is NaN");
}
return x;
};
// not quite valid, but good enough for JS
conversions["float"] = conversions["double"];
conversions["unrestricted float"] = conversions["unrestricted double"];
conversions["DOMString"] = function (V, opts) {
if (!opts) opts = {};
if (opts.treatNullAsEmptyString && V === null) {
return "";
}
return String(V);
};
conversions["ByteString"] = function (V, opts) {
const x = String(V);
let c = undefined;
for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
if (c > 255) {
throw new TypeError("Argument is not a valid bytestring");
}
}
return x;
};
conversions["USVString"] = function (V) {
const S = String(V);
const n = S.length;
const U = [];
for (let i = 0; i < n; ++i) {
const c = S.charCodeAt(i);
if (c < 0xD800 || c > 0xDFFF) {
U.push(String.fromCodePoint(c));
} else if (0xDC00 <= c && c <= 0xDFFF) {
U.push(String.fromCodePoint(0xFFFD));
} else {
if (i === n - 1) {
U.push(String.fromCodePoint(0xFFFD));
} else {
const d = S.charCodeAt(i + 1);
if (0xDC00 <= d && d <= 0xDFFF) {
const a = c & 0x3FF;
const b = d & 0x3FF;
U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));
++i;
} else {
U.push(String.fromCodePoint(0xFFFD));
}
}
}
}
return U.join('');
};
conversions["Date"] = function (V, opts) {
if (!(V instanceof Date)) {
throw new TypeError("Argument is not a Date object");
}
if (isNaN(V)) {
return undefined;
}
return V;
};
conversions["RegExp"] = function (V, opts) {
if (!(V instanceof RegExp)) {
V = new RegExp(V);
}
return V;
};
var utils = createCommonjsModule(function (module) {
module.exports.mixin = function mixin(target, source) {
const keys = Object.getOwnPropertyNames(source);
for (let i = 0; i < keys.length; ++i) {
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
}
};
module.exports.wrapperSymbol = Symbol("wrapper");
module.exports.implSymbol = Symbol("impl");
module.exports.wrapperForImpl = function (impl) {
return impl[module.exports.wrapperSymbol];
};
module.exports.implForWrapper = function (wrapper) {
return wrapper[module.exports.implSymbol];
};
});
var mappingTable = [
[
[
0,
44
],
"disallowed_STD3_valid"
],
[
[
45,
46
],
"valid"
],
[
[
47,
47
],
"disallowed_STD3_valid"
],
[
[
48,
57
],
"valid"
],
[
[
58,
64
],
"disallowed_STD3_valid"
],
[
[
65,
65
],
"mapped",
[
97
]
],
[
[
66,
66
],
"mapped",
[
98
]
],
[
[
67,
67
],
"mapped",
[
99
]
],
[
[
68,
68
],
"mapped",
[
100
]
],
[
[
69,
69
],
"mapped",
[
101
]
],
[
[
70,
70
],
"mapped",
[
102
]
],
[
[
71,
71
],
"mapped",
[
103
]
],
[
[
72,
72
],
"mapped",
[
104
]
],
[
[
73,
73
],
"mapped",
[
105
]
],
[
[
74,
74
],
"mapped",
[
106
]
],
[
[
75,
75
],
"mapped",
[
107
]
],
[
[
76,
76
],
"mapped",
[
108
]
],
[
[
77,
77
],
"mapped",
[
109
]
],
[
[
78,
78
],
"mapped",
[
110
]
],
[
[
79,
79
],
"mapped",
[
111
]
],
[
[
80,
80
],
"mapped",
[
112
]
],
[
[
81,
81
],
"mapped",
[
113
]
],
[
[
82,
82
],
"mapped",
[
114
]
],
[
[
83,
83
],
"mapped",
[
115
]
],
[
[
84,
84
],
"mapped",
[
116
]
],
[
[
85,
85
],
"mapped",
[
117
]
],
[
[
86,
86
],
"mapped",
[
118
]
],
[
[
87,
87
],
"mapped",
[
119
]
],
[
[
88,
88
],
"mapped",
[
120
]
],
[
[
89,
89
],
"mapped",
[
121
]
],
[
[
90,
90
],
"mapped",
[
122
]
],
[
[
91,
96
],
"disallowed_STD3_valid"
],
[
[
97,
122
],
"valid"
],
[
[
123,
127
],
"disallowed_STD3_valid"
],
[
[
128,
159
],
"disallowed"
],
[
[
160,
160
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
161,
167
],
"valid",
[
],
"NV8"
],
[
[
168,
168
],
"disallowed_STD3_mapped",
[
32,
776
]
],
[
[
169,
169
],
"valid",
[
],
"NV8"
],
[
[
170,
170
],
"mapped",
[
97
]
],
[
[
171,
172
],
"valid",
[
],
"NV8"
],
[
[
173,
173
],
"ignored"
],
[
[
174,
174
],
"valid",
[
],
"NV8"
],
[
[
175,
175
],
"disallowed_STD3_mapped",
[
32,
772
]
],
[
[
176,
177
],
"valid",
[
],
"NV8"
],
[
[
178,
178
],
"mapped",
[
50
]
],
[
[
179,
179
],
"mapped",
[
51
]
],
[
[
180,
180
],
"disallowed_STD3_mapped",
[
32,
769
]
],
[
[
181,
181
],
"mapped",
[
956
]
],
[
[
182,
182
],
"valid",
[
],
"NV8"
],
[
[
183,
183
],
"valid"
],
[
[
184,
184
],
"disallowed_STD3_mapped",
[
32,
807
]
],
[
[
185,
185
],
"mapped",
[
49
]
],
[
[
186,
186
],
"mapped",
[
111
]
],
[
[
187,
187
],
"valid",
[
],
"NV8"
],
[
[
188,
188
],
"mapped",
[
49,
8260,
52
]
],
[
[
189,
189
],
"mapped",
[
49,
8260,
50
]
],
[
[
190,
190
],
"mapped",
[
51,
8260,
52
]
],
[
[
191,
191
],
"valid",
[
],
"NV8"
],
[
[
192,
192
],
"mapped",
[
224
]
],
[
[
193,
193
],
"mapped",
[
225
]
],
[
[
194,
194
],
"mapped",
[
226
]
],
[
[
195,
195
],
"mapped",
[
227
]
],
[
[
196,
196
],
"mapped",
[
228
]
],
[
[
197,
197
],
"mapped",
[
229
]
],
[
[
198,
198
],
"mapped",
[
230
]
],
[
[
199,
199
],
"mapped",
[
231
]
],
[
[
200,
200
],
"mapped",
[
232
]
],
[
[
201,
201
],
"mapped",
[
233
]
],
[
[
202,
202
],
"mapped",
[
234
]
],
[
[
203,
203
],
"mapped",
[
235
]
],
[
[
204,
204
],
"mapped",
[
236
]
],
[
[
205,
205
],
"mapped",
[
237
]
],
[
[
206,
206
],
"mapped",
[
238
]
],
[
[
207,
207
],
"mapped",
[
239
]
],
[
[
208,
208
],
"mapped",
[
240
]
],
[
[
209,
209
],
"mapped",
[
241
]
],
[
[
210,
210
],
"mapped",
[
242
]
],
[
[
211,
211
],
"mapped",
[
243
]
],
[
[
212,
212
],
"mapped",
[
244
]
],
[
[
213,
213
],
"mapped",
[
245
]
],
[
[
214,
214
],
"mapped",
[
246
]
],
[
[
215,
215
],
"valid",
[
],
"NV8"
],
[
[
216,
216
],
"mapped",
[
248
]
],
[
[
217,
217
],
"mapped",
[
249
]
],
[
[
218,
218
],
"mapped",
[
250
]
],
[
[
219,
219
],
"mapped",
[
251
]
],
[
[
220,
220
],
"mapped",
[
252
]
],
[
[
221,
221
],
"mapped",
[
253
]
],
[
[
222,
222
],
"mapped",
[
254
]
],
[
[
223,
223
],
"deviation",
[
115,
115
]
],
[
[
224,
246
],
"valid"
],
[
[
247,
247
],
"valid",
[
],
"NV8"
],
[
[
248,
255
],
"valid"
],
[
[
256,
256
],
"mapped",
[
257
]
],
[
[
257,
257
],
"valid"
],
[
[
258,
258
],
"mapped",
[
259
]
],
[
[
259,
259
],
"valid"
],
[
[
260,
260
],
"mapped",
[
261
]
],
[
[
261,
261
],
"valid"
],
[
[
262,
262
],
"mapped",
[
263
]
],
[
[
263,
263
],
"valid"
],
[
[
264,
264
],
"mapped",
[
265
]
],
[
[
265,
265
],
"valid"
],
[
[
266,
266
],
"mapped",
[
267
]
],
[
[
267,
267
],
"valid"
],
[
[
268,
268
],
"mapped",
[
269
]
],
[
[
269,
269
],
"valid"
],
[
[
270,
270
],
"mapped",
[
271
]
],
[
[
271,
271
],
"valid"
],
[
[
272,
272
],
"mapped",
[
273
]
],
[
[
273,
273
],
"valid"
],
[
[
274,
274
],
"mapped",
[
275
]
],
[
[
275,
275
],
"valid"
],
[
[
276,
276
],
"mapped",
[
277
]
],
[
[
277,
277
],
"valid"
],
[
[
278,
278
],
"mapped",
[
279
]
],
[
[
279,
279
],
"valid"
],
[
[
280,
280
],
"mapped",
[
281
]
],
[
[
281,
281
],
"valid"
],
[
[
282,
282
],
"mapped",
[
283
]
],
[
[
283,
283
],
"valid"
],
[
[
284,
284
],
"mapped",
[
285
]
],
[
[
285,
285
],
"valid"
],
[
[
286,
286
],
"mapped",
[
287
]
],
[
[
287,
287
],
"valid"
],
[
[
288,
288
],
"mapped",
[
289
]
],
[
[
289,
289
],
"valid"
],
[
[
290,
290
],
"mapped",
[
291
]
],
[
[
291,
291
],
"valid"
],
[
[
292,
292
],
"mapped",
[
293
]
],
[
[
293,
293
],
"valid"
],
[
[
294,
294
],
"mapped",
[
295
]
],
[
[
295,
295
],
"valid"
],
[
[
296,
296
],
"mapped",
[
297
]
],
[
[
297,
297
],
"valid"
],
[
[
298,
298
],
"mapped",
[
299
]
],
[
[
299,
299
],
"valid"
],
[
[
300,
300
],
"mapped",
[
301
]
],
[
[
301,
301
],
"valid"
],
[
[
302,
302
],
"mapped",
[
303
]
],
[
[
303,
303
],
"valid"
],
[
[
304,
304
],
"mapped",
[
105,
775
]
],
[
[
305,
305
],
"valid"
],
[
[
306,
307
],
"mapped",
[
105,
106
]
],
[
[
308,
308
],
"mapped",
[
309
]
],
[
[
309,
309
],
"valid"
],
[
[
310,
310
],
"mapped",
[
311
]
],
[
[
311,
312
],
"valid"
],
[
[
313,
313
],
"mapped",
[
314
]
],
[
[
314,
314
],
"valid"
],
[
[
315,
315
],
"mapped",
[
316
]
],
[
[
316,
316
],
"valid"
],
[
[
317,
317
],
"mapped",
[
318
]
],
[
[
318,
318
],
"valid"
],
[
[
319,
320
],
"mapped",
[
108,
183
]
],
[
[
321,
321
],
"mapped",
[
322
]
],
[
[
322,
322
],
"valid"
],
[
[
323,
323
],
"mapped",
[
324
]
],
[
[
324,
324
],
"valid"
],
[
[
325,
325
],
"mapped",
[
326
]
],
[
[
326,
326
],
"valid"
],
[
[
327,
327
],
"mapped",
[
328
]
],
[
[
328,
328
],
"valid"
],
[
[
329,
329
],
"mapped",
[
700,
110
]
],
[
[
330,
330
],
"mapped",
[
331
]
],
[
[
331,
331
],
"valid"
],
[
[
332,
332
],
"mapped",
[
333
]
],
[
[
333,
333
],
"valid"
],
[
[
334,
334
],
"mapped",
[
335
]
],
[
[
335,
335
],
"valid"
],
[
[
336,
336
],
"mapped",
[
337
]
],
[
[
337,
337
],
"valid"
],
[
[
338,
338
],
"mapped",
[
339
]
],
[
[
339,
339
],
"valid"
],
[
[
340,
340
],
"mapped",
[
341
]
],
[
[
341,
341
],
"valid"
],
[
[
342,
342
],
"mapped",
[
343
]
],
[
[
343,
343
],
"valid"
],
[
[
344,
344
],
"mapped",
[
345
]
],
[
[
345,
345
],
"valid"
],
[
[
346,
346
],
"mapped",
[
347
]
],
[
[
347,
347
],
"valid"
],
[
[
348,
348
],
"mapped",
[
349
]
],
[
[
349,
349
],
"valid"
],
[
[
350,
350
],
"mapped",
[
351
]
],
[
[
351,
351
],
"valid"
],
[
[
352,
352
],
"mapped",
[
353
]
],
[
[
353,
353
],
"valid"
],
[
[
354,
354
],
"mapped",
[
355
]
],
[
[
355,
355
],
"valid"
],
[
[
356,
356
],
"mapped",
[
357
]
],
[
[
357,
357
],
"valid"
],
[
[
358,
358
],
"mapped",
[
359
]
],
[
[
359,
359
],
"valid"
],
[
[
360,
360
],
"mapped",
[
361
]
],
[
[
361,
361
],
"valid"
],
[
[
362,
362
],
"mapped",
[
363
]
],
[
[
363,
363
],
"valid"
],
[
[
364,
364
],
"mapped",
[
365
]
],
[
[
365,
365
],
"valid"
],
[
[
366,
366
],
"mapped",
[
367
]
],
[
[
367,
367
],
"valid"
],
[
[
368,
368
],
"mapped",
[
369
]
],
[
[
369,
369
],
"valid"
],
[
[
370,
370
],
"mapped",
[
371
]
],
[
[
371,
371
],
"valid"
],
[
[
372,
372
],
"mapped",
[
373
]
],
[
[
373,
373
],
"valid"
],
[
[
374,
374
],
"mapped",
[
375
]
],
[
[
375,
375
],
"valid"
],
[
[
376,
376
],
"mapped",
[
255
]
],
[
[
377,
377
],
"mapped",
[
378
]
],
[
[
378,
378
],
"valid"
],
[
[
379,
379
],
"mapped",
[
380
]
],
[
[
380,
380
],
"valid"
],
[
[
381,
381
],
"mapped",
[
382
]
],
[
[
382,
382
],
"valid"
],
[
[
383,
383
],
"mapped",
[
115
]
],
[
[
384,
384
],
"valid"
],
[
[
385,
385
],
"mapped",
[
595
]
],
[
[
386,
386
],
"mapped",
[
387
]
],
[
[
387,
387
],
"valid"
],
[
[
388,
388
],
"mapped",
[
389
]
],
[
[
389,
389
],
"valid"
],
[
[
390,
390
],
"mapped",
[
596
]
],
[
[
391,
391
],
"mapped",
[
392
]
],
[
[
392,
392
],
"valid"
],
[
[
393,
393
],
"mapped",
[
598
]
],
[
[
394,
394
],
"mapped",
[
599
]
],
[
[
395,
395
],
"mapped",
[
396
]
],
[
[
396,
397
],
"valid"
],
[
[
398,
398
],
"mapped",
[
477
]
],
[
[
399,
399
],
"mapped",
[
601
]
],
[
[
400,
400
],
"mapped",
[
603
]
],
[
[
401,
401
],
"mapped",
[
402
]
],
[
[
402,
402
],
"valid"
],
[
[
403,
403
],
"mapped",
[
608
]
],
[
[
404,
404
],
"mapped",
[
611
]
],
[
[
405,
405
],
"valid"
],
[
[
406,
406
],
"mapped",
[
617
]
],
[
[
407,
407
],
"mapped",
[
616
]
],
[
[
408,
408
],
"mapped",
[
409
]
],
[
[
409,
411
],
"valid"
],
[
[
412,
412
],
"mapped",
[
623
]
],
[
[
413,
413
],
"mapped",
[
626
]
],
[
[
414,
414
],
"valid"
],
[
[
415,
415
],
"mapped",
[
629
]
],
[
[
416,
416
],
"mapped",
[
417
]
],
[
[
417,
417
],
"valid"
],
[
[
418,
418
],
"mapped",
[
419
]
],
[
[
419,
419
],
"valid"
],
[
[
420,
420
],
"mapped",
[
421
]
],
[
[
421,
421
],
"valid"
],
[
[
422,
422
],
"mapped",
[
640
]
],
[
[
423,
423
],
"mapped",
[
424
]
],
[
[
424,
424
],
"valid"
],
[
[
425,
425
],
"mapped",
[
643
]
],
[
[
426,
427
],
"valid"
],
[
[
428,
428
],
"mapped",
[
429
]
],
[
[
429,
429
],
"valid"
],
[
[
430,
430
],
"mapped",
[
648
]
],
[
[
431,
431
],
"mapped",
[
432
]
],
[
[
432,
432
],
"valid"
],
[
[
433,
433
],
"mapped",
[
650
]
],
[
[
434,
434
],
"mapped",
[
651
]
],
[
[
435,
435
],
"mapped",
[
436
]
],
[
[
436,
436
],
"valid"
],
[
[
437,
437
],
"mapped",
[
438
]
],
[
[
438,
438
],
"valid"
],
[
[
439,
439
],
"mapped",
[
658
]
],
[
[
440,
440
],
"mapped",
[
441
]
],
[
[
441,
443
],
"valid"
],
[
[
444,
444
],
"mapped",
[
445
]
],
[
[
445,
451
],
"valid"
],
[
[
452,
454
],
"mapped",
[
100,
382
]
],
[
[
455,
457
],
"mapped",
[
108,
106
]
],
[
[
458,
460
],
"mapped",
[
110,
106
]
],
[
[
461,
461
],
"mapped",
[
462
]
],
[
[
462,
462
],
"valid"
],
[
[
463,
463
],
"mapped",
[
464
]
],
[
[
464,
464
],
"valid"
],
[
[
465,
465
],
"mapped",
[
466
]
],
[
[
466,
466
],
"valid"
],
[
[
467,
467
],
"mapped",
[
468
]
],
[
[
468,
468
],
"valid"
],
[
[
469,
469
],
"mapped",
[
470
]
],
[
[
470,
470
],
"valid"
],
[
[
471,
471
],
"mapped",
[
472
]
],
[
[
472,
472
],
"valid"
],
[
[
473,
473
],
"mapped",
[
474
]
],
[
[
474,
474
],
"valid"
],
[
[
475,
475
],
"mapped",
[
476
]
],
[
[
476,
477
],
"valid"
],
[
[
478,
478
],
"mapped",
[
479
]
],
[
[
479,
479
],
"valid"
],
[
[
480,
480
],
"mapped",
[
481
]
],
[
[
481,
481
],
"valid"
],
[
[
482,
482
],
"mapped",
[
483
]
],
[
[
483,
483
],
"valid"
],
[
[
484,
484
],
"mapped",
[
485
]
],
[
[
485,
485
],
"valid"
],
[
[
486,
486
],
"mapped",
[
487
]
],
[
[
487,
487
],
"valid"
],
[
[
488,
488
],
"mapped",
[
489
]
],
[
[
489,
489
],
"valid"
],
[
[
490,
490
],
"mapped",
[
491
]
],
[
[
491,
491
],
"valid"
],
[
[
492,
492
],
"mapped",
[
493
]
],
[
[
493,
493
],
"valid"
],
[
[
494,
494
],
"mapped",
[
495
]
],
[
[
495,
496
],
"valid"
],
[
[
497,
499
],
"mapped",
[
100,
122
]
],
[
[
500,
500
],
"mapped",
[
501
]
],
[
[
501,
501
],
"valid"
],
[
[
502,
502
],
"mapped",
[
405
]
],
[
[
503,
503
],
"mapped",
[
447
]
],
[
[
504,
504
],
"mapped",
[
505
]
],
[
[
505,
505
],
"valid"
],
[
[
506,
506
],
"mapped",
[
507
]
],
[
[
507,
507
],
"valid"
],
[
[
508,
508
],
"mapped",
[
509
]
],
[
[
509,
509
],
"valid"
],
[
[
510,
510
],
"mapped",
[
511
]
],
[
[
511,
511
],
"valid"
],
[
[
512,
512
],
"mapped",
[
513
]
],
[
[
513,
513
],
"valid"
],
[
[
514,
514
],
"mapped",
[
515
]
],
[
[
515,
515
],
"valid"
],
[
[
516,
516
],
"mapped",
[
517
]
],
[
[
517,
517
],
"valid"
],
[
[
518,
518
],
"mapped",
[
519
]
],
[
[
519,
519
],
"valid"
],
[
[
520,
520
],
"mapped",
[
521
]
],
[
[
521,
521
],
"valid"
],
[
[
522,
522
],
"mapped",
[
523
]
],
[
[
523,
523
],
"valid"
],
[
[
524,
524
],
"mapped",
[
525
]
],
[
[
525,
525
],
"valid"
],
[
[
526,
526
],
"mapped",
[
527
]
],
[
[
527,
527
],
"valid"
],
[
[
528,
528
],
"mapped",
[
529
]
],
[
[
529,
529
],
"valid"
],
[
[
530,
530
],
"mapped",
[
531
]
],
[
[
531,
531
],
"valid"
],
[
[
532,
532
],
"mapped",
[
533
]
],
[
[
533,
533
],
"valid"
],
[
[
534,
534
],
"mapped",
[
535
]
],
[
[
535,
535
],
"valid"
],
[
[
536,
536
],
"mapped",
[
537
]
],
[
[
537,
537
],
"valid"
],
[
[
538,
538
],
"mapped",
[
539
]
],
[
[
539,
539
],
"valid"
],
[
[
540,
540
],
"mapped",
[
541
]
],
[
[
541,
541
],
"valid"
],
[
[
542,
542
],
"mapped",
[
543
]
],
[
[
543,
543
],
"valid"
],
[
[
544,
544
],
"mapped",
[
414
]
],
[
[
545,
545
],
"valid"
],
[
[
546,
546
],
"mapped",
[
547
]
],
[
[
547,
547
],
"valid"
],
[
[
548,
548
],
"mapped",
[
549
]
],
[
[
549,
549
],
"valid"
],
[
[
550,
550
],
"mapped",
[
551
]
],
[
[
551,
551
],
"valid"
],
[
[
552,
552
],
"mapped",
[
553
]
],
[
[
553,
553
],
"valid"
],
[
[
554,
554
],
"mapped",
[
555
]
],
[
[
555,
555
],
"valid"
],
[
[
556,
556
],
"mapped",
[
557
]
],
[
[
557,
557
],
"valid"
],
[
[
558,
558
],
"mapped",
[
559
]
],
[
[
559,
559
],
"valid"
],
[
[
560,
560
],
"mapped",
[
561
]
],
[
[
561,
561
],
"valid"
],
[
[
562,
562
],
"mapped",
[
563
]
],
[
[
563,
563
],
"valid"
],
[
[
564,
566
],
"valid"
],
[
[
567,
569
],
"valid"
],
[
[
570,
570
],
"mapped",
[
11365
]
],
[
[
571,
571
],
"mapped",
[
572
]
],
[
[
572,
572
],
"valid"
],
[
[
573,
573
],
"mapped",
[
410
]
],
[
[
574,
574
],
"mapped",
[
11366
]
],
[
[
575,
576
],
"valid"
],
[
[
577,
577
],
"mapped",
[
578
]
],
[
[
578,
578
],
"valid"
],
[
[
579,
579
],
"mapped",
[
384
]
],
[
[
580,
580
],
"mapped",
[
649
]
],
[
[
581,
581
],
"mapped",
[
652
]
],
[
[
582,
582
],
"mapped",
[
583
]
],
[
[
583,
583
],
"valid"
],
[
[
584,
584
],
"mapped",
[
585
]
],
[
[
585,
585
],
"valid"
],
[
[
586,
586
],
"mapped",
[
587
]
],
[
[
587,
587
],
"valid"
],
[
[
588,
588
],
"mapped",
[
589
]
],
[
[
589,
589
],
"valid"
],
[
[
590,
590
],
"mapped",
[
591
]
],
[
[
591,
591
],
"valid"
],
[
[
592,
680
],
"valid"
],
[
[
681,
685
],
"valid"
],
[
[
686,
687
],
"valid"
],
[
[
688,
688
],
"mapped",
[
104
]
],
[
[
689,
689
],
"mapped",
[
614
]
],
[
[
690,
690
],
"mapped",
[
106
]
],
[
[
691,
691
],
"mapped",
[
114
]
],
[
[
692,
692
],
"mapped",
[
633
]
],
[
[
693,
693
],
"mapped",
[
635
]
],
[
[
694,
694
],
"mapped",
[
641
]
],
[
[
695,
695
],
"mapped",
[
119
]
],
[
[
696,
696
],
"mapped",
[
121
]
],
[
[
697,
705
],
"valid"
],
[
[
706,
709
],
"valid",
[
],
"NV8"
],
[
[
710,
721
],
"valid"
],
[
[
722,
727
],
"valid",
[
],
"NV8"
],
[
[
728,
728
],
"disallowed_STD3_mapped",
[
32,
774
]
],
[
[
729,
729
],
"disallowed_STD3_mapped",
[
32,
775
]
],
[
[
730,
730
],
"disallowed_STD3_mapped",
[
32,
778
]
],
[
[
731,
731
],
"disallowed_STD3_mapped",
[
32,
808
]
],
[
[
732,
732
],
"disallowed_STD3_mapped",
[
32,
771
]
],
[
[
733,
733
],
"disallowed_STD3_mapped",
[
32,
779
]
],
[
[
734,
734
],
"valid",
[
],
"NV8"
],
[
[
735,
735
],
"valid",
[
],
"NV8"
],
[
[
736,
736
],
"mapped",
[
611
]
],
[
[
737,
737
],
"mapped",
[
108
]
],
[
[
738,
738
],
"mapped",
[
115
]
],
[
[
739,
739
],
"mapped",
[
120
]
],
[
[
740,
740
],
"mapped",
[
661
]
],
[
[
741,
745
],
"valid",
[
],
"NV8"
],
[
[
746,
747
],
"valid",
[
],
"NV8"
],
[
[
748,
748
],
"valid"
],
[
[
749,
749
],
"valid",
[
],
"NV8"
],
[
[
750,
750
],
"valid"
],
[
[
751,
767
],
"valid",
[
],
"NV8"
],
[
[
768,
831
],
"valid"
],
[
[
832,
832
],
"mapped",
[
768
]
],
[
[
833,
833
],
"mapped",
[
769
]
],
[
[
834,
834
],
"valid"
],
[
[
835,
835
],
"mapped",
[
787
]
],
[
[
836,
836
],
"mapped",
[
776,
769
]
],
[
[
837,
837
],
"mapped",
[
953
]
],
[
[
838,
846
],
"valid"
],
[
[
847,
847
],
"ignored"
],
[
[
848,
855
],
"valid"
],
[
[
856,
860
],
"valid"
],
[
[
861,
863
],
"valid"
],
[
[
864,
865
],
"valid"
],
[
[
866,
866
],
"valid"
],
[
[
867,
879
],
"valid"
],
[
[
880,
880
],
"mapped",
[
881
]
],
[
[
881,
881
],
"valid"
],
[
[
882,
882
],
"mapped",
[
883
]
],
[
[
883,
883
],
"valid"
],
[
[
884,
884
],
"mapped",
[
697
]
],
[
[
885,
885
],
"valid"
],
[
[
886,
886
],
"mapped",
[
887
]
],
[
[
887,
887
],
"valid"
],
[
[
888,
889
],
"disallowed"
],
[
[
890,
890
],
"disallowed_STD3_mapped",
[
32,
953
]
],
[
[
891,
893
],
"valid"
],
[
[
894,
894
],
"disallowed_STD3_mapped",
[
59
]
],
[
[
895,
895
],
"mapped",
[
1011
]
],
[
[
896,
899
],
"disallowed"
],
[
[
900,
900
],
"disallowed_STD3_mapped",
[
32,
769
]
],
[
[
901,
901
],
"disallowed_STD3_mapped",
[
32,
776,
769
]
],
[
[
902,
902
],
"mapped",
[
940
]
],
[
[
903,
903
],
"mapped",
[
183
]
],
[
[
904,
904
],
"mapped",
[
941
]
],
[
[
905,
905
],
"mapped",
[
942
]
],
[
[
906,
906
],
"mapped",
[
943
]
],
[
[
907,
907
],
"disallowed"
],
[
[
908,
908
],
"mapped",
[
972
]
],
[
[
909,
909
],
"disallowed"
],
[
[
910,
910
],
"mapped",
[
973
]
],
[
[
911,
911
],
"mapped",
[
974
]
],
[
[
912,
912
],
"valid"
],
[
[
913,
913
],
"mapped",
[
945
]
],
[
[
914,
914
],
"mapped",
[
946
]
],
[
[
915,
915
],
"mapped",
[
947
]
],
[
[
916,
916
],
"mapped",
[
948
]
],
[
[
917,
917
],
"mapped",
[
949
]
],
[
[
918,
918
],
"mapped",
[
950
]
],
[
[
919,
919
],
"mapped",
[
951
]
],
[
[
920,
920
],
"mapped",
[
952
]
],
[
[
921,
921
],
"mapped",
[
953
]
],
[
[
922,
922
],
"mapped",
[
954
]
],
[
[
923,
923
],
"mapped",
[
955
]
],
[
[
924,
924
],
"mapped",
[
956
]
],
[
[
925,
925
],
"mapped",
[
957
]
],
[
[
926,
926
],
"mapped",
[
958
]
],
[
[
927,
927
],
"mapped",
[
959
]
],
[
[
928,
928
],
"mapped",
[
960
]
],
[
[
929,
929
],
"mapped",
[
961
]
],
[
[
930,
930
],
"disallowed"
],
[
[
931,
931
],
"mapped",
[
963
]
],
[
[
932,
932
],
"mapped",
[
964
]
],
[
[
933,
933
],
"mapped",
[
965
]
],
[
[
934,
934
],
"mapped",
[
966
]
],
[
[
935,
935
],
"mapped",
[
967
]
],
[
[
936,
936
],
"mapped",
[
968
]
],
[
[
937,
937
],
"mapped",
[
969
]
],
[
[
938,
938
],
"mapped",
[
970
]
],
[
[
939,
939
],
"mapped",
[
971
]
],
[
[
940,
961
],
"valid"
],
[
[
962,
962
],
"deviation",
[
963
]
],
[
[
963,
974
],
"valid"
],
[
[
975,
975
],
"mapped",
[
983
]
],
[
[
976,
976
],
"mapped",
[
946
]
],
[
[
977,
977
],
"mapped",
[
952
]
],
[
[
978,
978
],
"mapped",
[
965
]
],
[
[
979,
979
],
"mapped",
[
973
]
],
[
[
980,
980
],
"mapped",
[
971
]
],
[
[
981,
981
],
"mapped",
[
966
]
],
[
[
982,
982
],
"mapped",
[
960
]
],
[
[
983,
983
],
"valid"
],
[
[
984,
984
],
"mapped",
[
985
]
],
[
[
985,
985
],
"valid"
],
[
[
986,
986
],
"mapped",
[
987
]
],
[
[
987,
987
],
"valid"
],
[
[
988,
988
],
"mapped",
[
989
]
],
[
[
989,
989
],
"valid"
],
[
[
990,
990
],
"mapped",
[
991
]
],
[
[
991,
991
],
"valid"
],
[
[
992,
992
],
"mapped",
[
993
]
],
[
[
993,
993
],
"valid"
],
[
[
994,
994
],
"mapped",
[
995
]
],
[
[
995,
995
],
"valid"
],
[
[
996,
996
],
"mapped",
[
997
]
],
[
[
997,
997
],
"valid"
],
[
[
998,
998
],
"mapped",
[
999
]
],
[
[
999,
999
],
"valid"
],
[
[
1000,
1000
],
"mapped",
[
1001
]
],
[
[
1001,
1001
],
"valid"
],
[
[
1002,
1002
],
"mapped",
[
1003
]
],
[
[
1003,
1003
],
"valid"
],
[
[
1004,
1004
],
"mapped",
[
1005
]
],
[
[
1005,
1005
],
"valid"
],
[
[
1006,
1006
],
"mapped",
[
1007
]
],
[
[
1007,
1007
],
"valid"
],
[
[
1008,
1008
],
"mapped",
[
954
]
],
[
[
1009,
1009
],
"mapped",
[
961
]
],
[
[
1010,
1010
],
"mapped",
[
963
]
],
[
[
1011,
1011
],
"valid"
],
[
[
1012,
1012
],
"mapped",
[
952
]
],
[
[
1013,
1013
],
"mapped",
[
949
]
],
[
[
1014,
1014
],
"valid",
[
],
"NV8"
],
[
[
1015,
1015
],
"mapped",
[
1016
]
],
[
[
1016,
1016
],
"valid"
],
[
[
1017,
1017
],
"mapped",
[
963
]
],
[
[
1018,
1018
],
"mapped",
[
1019
]
],
[
[
1019,
1019
],
"valid"
],
[
[
1020,
1020
],
"valid"
],
[
[
1021,
1021
],
"mapped",
[
891
]
],
[
[
1022,
1022
],
"mapped",
[
892
]
],
[
[
1023,
1023
],
"mapped",
[
893
]
],
[
[
1024,
1024
],
"mapped",
[
1104
]
],
[
[
1025,
1025
],
"mapped",
[
1105
]
],
[
[
1026,
1026
],
"mapped",
[
1106
]
],
[
[
1027,
1027
],
"mapped",
[
1107
]
],
[
[
1028,
1028
],
"mapped",
[
1108
]
],
[
[
1029,
1029
],
"mapped",
[
1109
]
],
[
[
1030,
1030
],
"mapped",
[
1110
]
],
[
[
1031,
1031
],
"mapped",
[
1111
]
],
[
[
1032,
1032
],
"mapped",
[
1112
]
],
[
[
1033,
1033
],
"mapped",
[
1113
]
],
[
[
1034,
1034
],
"mapped",
[
1114
]
],
[
[
1035,
1035
],
"mapped",
[
1115
]
],
[
[
1036,
1036
],
"mapped",
[
1116
]
],
[
[
1037,
1037
],
"mapped",
[
1117
]
],
[
[
1038,
1038
],
"mapped",
[
1118
]
],
[
[
1039,
1039
],
"mapped",
[
1119
]
],
[
[
1040,
1040
],
"mapped",
[
1072
]
],
[
[
1041,
1041
],
"mapped",
[
1073
]
],
[
[
1042,
1042
],
"mapped",
[
1074
]
],
[
[
1043,
1043
],
"mapped",
[
1075
]
],
[
[
1044,
1044
],
"mapped",
[
1076
]
],
[
[
1045,
1045
],
"mapped",
[
1077
]
],
[
[
1046,
1046
],
"mapped",
[
1078
]
],
[
[
1047,
1047
],
"mapped",
[
1079
]
],
[
[
1048,
1048
],
"mapped",
[
1080
]
],
[
[
1049,
1049
],
"mapped",
[
1081
]
],
[
[
1050,
1050
],
"mapped",
[
1082
]
],
[
[
1051,
1051
],
"mapped",
[
1083
]
],
[
[
1052,
1052
],
"mapped",
[
1084
]
],
[
[
1053,
1053
],
"mapped",
[
1085
]
],
[
[
1054,
1054
],
"mapped",
[
1086
]
],
[
[
1055,
1055
],
"mapped",
[
1087
]
],
[
[
1056,
1056
],
"mapped",
[
1088
]
],
[
[
1057,
1057
],
"mapped",
[
1089
]
],
[
[
1058,
1058
],
"mapped",
[
1090
]
],
[
[
1059,
1059
],
"mapped",
[
1091
]
],
[
[
1060,
1060
],
"mapped",
[
1092
]
],
[
[
1061,
1061
],
"mapped",
[
1093
]
],
[
[
1062,
1062
],
"mapped",
[
1094
]
],
[
[
1063,
1063
],
"mapped",
[
1095
]
],
[
[
1064,
1064
],
"mapped",
[
1096
]
],
[
[
1065,
1065
],
"mapped",
[
1097
]
],
[
[
1066,
1066
],
"mapped",
[
1098
]
],
[
[
1067,
1067
],
"mapped",
[
1099
]
],
[
[
1068,
1068
],
"mapped",
[
1100
]
],
[
[
1069,
1069
],
"mapped",
[
1101
]
],
[
[
1070,
1070
],
"mapped",
[
1102
]
],
[
[
1071,
1071
],
"mapped",
[
1103
]
],
[
[
1072,
1103
],
"valid"
],
[
[
1104,
1104
],
"valid"
],
[
[
1105,
1116
],
"valid"
],
[
[
1117,
1117
],
"valid"
],
[
[
1118,
1119
],
"valid"
],
[
[
1120,
1120
],
"mapped",
[
1121
]
],
[
[
1121,
1121
],
"valid"
],
[
[
1122,
1122
],
"mapped",
[
1123
]
],
[
[
1123,
1123
],
"valid"
],
[
[
1124,
1124
],
"mapped",
[
1125
]
],
[
[
1125,
1125
],
"valid"
],
[
[
1126,
1126
],
"mapped",
[
1127
]
],
[
[
1127,
1127
],
"valid"
],
[
[
1128,
1128
],
"mapped",
[
1129
]
],
[
[
1129,
1129
],
"valid"
],
[
[
1130,
1130
],
"mapped",
[
1131
]
],
[
[
1131,
1131
],
"valid"
],
[
[
1132,
1132
],
"mapped",
[
1133
]
],
[
[
1133,
1133
],
"valid"
],
[
[
1134,
1134
],
"mapped",
[
1135
]
],
[
[
1135,
1135
],
"valid"
],
[
[
1136,
1136
],
"mapped",
[
1137
]
],
[
[
1137,
1137
],
"valid"
],
[
[
1138,
1138
],
"mapped",
[
1139
]
],
[
[
1139,
1139
],
"valid"
],
[
[
1140,
1140
],
"mapped",
[
1141
]
],
[
[
1141,
1141
],
"valid"
],
[
[
1142,
1142
],
"mapped",
[
1143
]
],
[
[
1143,
1143
],
"valid"
],
[
[
1144,
1144
],
"mapped",
[
1145
]
],
[
[
1145,
1145
],
"valid"
],
[
[
1146,
1146
],
"mapped",
[
1147
]
],
[
[
1147,
1147
],
"valid"
],
[
[
1148,
1148
],
"mapped",
[
1149
]
],
[
[
1149,
1149
],
"valid"
],
[
[
1150,
1150
],
"mapped",
[
1151
]
],
[
[
1151,
1151
],
"valid"
],
[
[
1152,
1152
],
"mapped",
[
1153
]
],
[
[
1153,
1153
],
"valid"
],
[
[
1154,
1154
],
"valid",
[
],
"NV8"
],
[
[
1155,
1158
],
"valid"
],
[
[
1159,
1159
],
"valid"
],
[
[
1160,
1161
],
"valid",
[
],
"NV8"
],
[
[
1162,
1162
],
"mapped",
[
1163
]
],
[
[
1163,
1163
],
"valid"
],
[
[
1164,
1164
],
"mapped",
[
1165
]
],
[
[
1165,
1165
],
"valid"
],
[
[
1166,
1166
],
"mapped",
[
1167
]
],
[
[
1167,
1167
],
"valid"
],
[
[
1168,
1168
],
"mapped",
[
1169
]
],
[
[
1169,
1169
],
"valid"
],
[
[
1170,
1170
],
"mapped",
[
1171
]
],
[
[
1171,
1171
],
"valid"
],
[
[
1172,
1172
],
"mapped",
[
1173
]
],
[
[
1173,
1173
],
"valid"
],
[
[
1174,
1174
],
"mapped",
[
1175
]
],
[
[
1175,
1175
],
"valid"
],
[
[
1176,
1176
],
"mapped",
[
1177
]
],
[
[
1177,
1177
],
"valid"
],
[
[
1178,
1178
],
"mapped",
[
1179
]
],
[
[
1179,
1179
],
"valid"
],
[
[
1180,
1180
],
"mapped",
[
1181
]
],
[
[
1181,
1181
],
"valid"
],
[
[
1182,
1182
],
"mapped",
[
1183
]
],
[
[
1183,
1183
],
"valid"
],
[
[
1184,
1184
],
"mapped",
[
1185
]
],
[
[
1185,
1185
],
"valid"
],
[
[
1186,
1186
],
"mapped",
[
1187
]
],
[
[
1187,
1187
],
"valid"
],
[
[
1188,
1188
],
"mapped",
[
1189
]
],
[
[
1189,
1189
],
"valid"
],
[
[
1190,
1190
],
"mapped",
[
1191
]
],
[
[
1191,
1191
],
"valid"
],
[
[
1192,
1192
],
"mapped",
[
1193
]
],
[
[
1193,
1193
],
"valid"
],
[
[
1194,
1194
],
"mapped",
[
1195
]
],
[
[
1195,
1195
],
"valid"
],
[
[
1196,
1196
],
"mapped",
[
1197
]
],
[
[
1197,
1197
],
"valid"
],
[
[
1198,
1198
],
"mapped",
[
1199
]
],
[
[
1199,
1199
],
"valid"
],
[
[
1200,
1200
],
"mapped",
[
1201
]
],
[
[
1201,
1201
],
"valid"
],
[
[
1202,
1202
],
"mapped",
[
1203
]
],
[
[
1203,
1203
],
"valid"
],
[
[
1204,
1204
],
"mapped",
[
1205
]
],
[
[
1205,
1205
],
"valid"
],
[
[
1206,
1206
],
"mapped",
[
1207
]
],
[
[
1207,
1207
],
"valid"
],
[
[
1208,
1208
],
"mapped",
[
1209
]
],
[
[
1209,
1209
],
"valid"
],
[
[
1210,
1210
],
"mapped",
[
1211
]
],
[
[
1211,
1211
],
"valid"
],
[
[
1212,
1212
],
"mapped",
[
1213
]
],
[
[
1213,
1213
],
"valid"
],
[
[
1214,
1214
],
"mapped",
[
1215
]
],
[
[
1215,
1215
],
"valid"
],
[
[
1216,
1216
],
"disallowed"
],
[
[
1217,
1217
],
"mapped",
[
1218
]
],
[
[
1218,
1218
],
"valid"
],
[
[
1219,
1219
],
"mapped",
[
1220
]
],
[
[
1220,
1220
],
"valid"
],
[
[
1221,
1221
],
"mapped",
[
1222
]
],
[
[
1222,
1222
],
"valid"
],
[
[
1223,
1223
],
"mapped",
[
1224
]
],
[
[
1224,
1224
],
"valid"
],
[
[
1225,
1225
],
"mapped",
[
1226
]
],
[
[
1226,
1226
],
"valid"
],
[
[
1227,
1227
],
"mapped",
[
1228
]
],
[
[
1228,
1228
],
"valid"
],
[
[
1229,
1229
],
"mapped",
[
1230
]
],
[
[
1230,
1230
],
"valid"
],
[
[
1231,
1231
],
"valid"
],
[
[
1232,
1232
],
"mapped",
[
1233
]
],
[
[
1233,
1233
],
"valid"
],
[
[
1234,
1234
],
"mapped",
[
1235
]
],
[
[
1235,
1235
],
"valid"
],
[
[
1236,
1236
],
"mapped",
[
1237
]
],
[
[
1237,
1237
],
"valid"
],
[
[
1238,
1238
],
"mapped",
[
1239
]
],
[
[
1239,
1239
],
"valid"
],
[
[
1240,
1240
],
"mapped",
[
1241
]
],
[
[
1241,
1241
],
"valid"
],
[
[
1242,
1242
],
"mapped",
[
1243
]
],
[
[
1243,
1243
],
"valid"
],
[
[
1244,
1244
],
"mapped",
[
1245
]
],
[
[
1245,
1245
],
"valid"
],
[
[
1246,
1246
],
"mapped",
[
1247
]
],
[
[
1247,
1247
],
"valid"
],
[
[
1248,
1248
],
"mapped",
[
1249
]
],
[
[
1249,
1249
],
"valid"
],
[
[
1250,
1250
],
"mapped",
[
1251
]
],
[
[
1251,
1251
],
"valid"
],
[
[
1252,
1252
],
"mapped",
[
1253
]
],
[
[
1253,
1253
],
"valid"
],
[
[
1254,
1254
],
"mapped",
[
1255
]
],
[
[
1255,
1255
],
"valid"
],
[
[
1256,
1256
],
"mapped",
[
1257
]
],
[
[
1257,
1257
],
"valid"
],
[
[
1258,
1258
],
"mapped",
[
1259
]
],
[
[
1259,
1259
],
"valid"
],
[
[
1260,
1260
],
"mapped",
[
1261
]
],
[
[
1261,
1261
],
"valid"
],
[
[
1262,
1262
],
"mapped",
[
1263
]
],
[
[
1263,
1263
],
"valid"
],
[
[
1264,
1264
],
"mapped",
[
1265
]
],
[
[
1265,
1265
],
"valid"
],
[
[
1266,
1266
],
"mapped",
[
1267
]
],
[
[
1267,
1267
],
"valid"
],
[
[
1268,
1268
],
"mapped",
[
1269
]
],
[
[
1269,
1269
],
"valid"
],
[
[
1270,
1270
],
"mapped",
[
1271
]
],
[
[
1271,
1271
],
"valid"
],
[
[
1272,
1272
],
"mapped",
[
1273
]
],
[
[
1273,
1273
],
"valid"
],
[
[
1274,
1274
],
"mapped",
[
1275
]
],
[
[
1275,
1275
],
"valid"
],
[
[
1276,
1276
],
"mapped",
[
1277
]
],
[
[
1277,
1277
],
"valid"
],
[
[
1278,
1278
],
"mapped",
[
1279
]
],
[
[
1279,
1279
],
"valid"
],
[
[
1280,
1280
],
"mapped",
[
1281
]
],
[
[
1281,
1281
],
"valid"
],
[
[
1282,
1282
],
"mapped",
[
1283
]
],
[
[
1283,
1283
],
"valid"
],
[
[
1284,
1284
],
"mapped",
[
1285
]
],
[
[
1285,
1285
],
"valid"
],
[
[
1286,
1286
],
"mapped",
[
1287
]
],
[
[
1287,
1287
],
"valid"
],
[
[
1288,
1288
],
"mapped",
[
1289
]
],
[
[
1289,
1289
],
"valid"
],
[
[
1290,
1290
],
"mapped",
[
1291
]
],
[
[
1291,
1291
],
"valid"
],
[
[
1292,
1292
],
"mapped",
[
1293
]
],
[
[
1293,
1293
],
"valid"
],
[
[
1294,
1294
],
"mapped",
[
1295
]
],
[
[
1295,
1295
],
"valid"
],
[
[
1296,
1296
],
"mapped",
[
1297
]
],
[
[
1297,
1297
],
"valid"
],
[
[
1298,
1298
],
"mapped",
[
1299
]
],
[
[
1299,
1299
],
"valid"
],
[
[
1300,
1300
],
"mapped",
[
1301
]
],
[
[
1301,
1301
],
"valid"
],
[
[
1302,
1302
],
"mapped",
[
1303
]
],
[
[
1303,
1303
],
"valid"
],
[
[
1304,
1304
],
"mapped",
[
1305
]
],
[
[
1305,
1305
],
"valid"
],
[
[
1306,
1306
],
"mapped",
[
1307
]
],
[
[
1307,
1307
],
"valid"
],
[
[
1308,
1308
],
"mapped",
[
1309
]
],
[
[
1309,
1309
],
"valid"
],
[
[
1310,
1310
],
"mapped",
[
1311
]
],
[
[
1311,
1311
],
"valid"
],
[
[
1312,
1312
],
"mapped",
[
1313
]
],
[
[
1313,
1313
],
"valid"
],
[
[
1314,
1314
],
"mapped",
[
1315
]
],
[
[
1315,
1315
],
"valid"
],
[
[
1316,
1316
],
"mapped",
[
1317
]
],
[
[
1317,
1317
],
"valid"
],
[
[
1318,
1318
],
"mapped",
[
1319
]
],
[
[
1319,
1319
],
"valid"
],
[
[
1320,
1320
],
"mapped",
[
1321
]
],
[
[
1321,
1321
],
"valid"
],
[
[
1322,
1322
],
"mapped",
[
1323
]
],
[
[
1323,
1323
],
"valid"
],
[
[
1324,
1324
],
"mapped",
[
1325
]
],
[
[
1325,
1325
],
"valid"
],
[
[
1326,
1326
],
"mapped",
[
1327
]
],
[
[
1327,
1327
],
"valid"
],
[
[
1328,
1328
],
"disallowed"
],
[
[
1329,
1329
],
"mapped",
[
1377
]
],
[
[
1330,
1330
],
"mapped",
[
1378
]
],
[
[
1331,
1331
],
"mapped",
[
1379
]
],
[
[
1332,
1332
],
"mapped",
[
1380
]
],
[
[
1333,
1333
],
"mapped",
[
1381
]
],
[
[
1334,
1334
],
"mapped",
[
1382
]
],
[
[
1335,
1335
],
"mapped",
[
1383
]
],
[
[
1336,
1336
],
"mapped",
[
1384
]
],
[
[
1337,
1337
],
"mapped",
[
1385
]
],
[
[
1338,
1338
],
"mapped",
[
1386
]
],
[
[
1339,
1339
],
"mapped",
[
1387
]
],
[
[
1340,
1340
],
"mapped",
[
1388
]
],
[
[
1341,
1341
],
"mapped",
[
1389
]
],
[
[
1342,
1342
],
"mapped",
[
1390
]
],
[
[
1343,
1343
],
"mapped",
[
1391
]
],
[
[
1344,
1344
],
"mapped",
[
1392
]
],
[
[
1345,
1345
],
"mapped",
[
1393
]
],
[
[
1346,
1346
],
"mapped",
[
1394
]
],
[
[
1347,
1347
],
"mapped",
[
1395
]
],
[
[
1348,
1348
],
"mapped",
[
1396
]
],
[
[
1349,
1349
],
"mapped",
[
1397
]
],
[
[
1350,
1350
],
"mapped",
[
1398
]
],
[
[
1351,
1351
],
"mapped",
[
1399
]
],
[
[
1352,
1352
],
"mapped",
[
1400
]
],
[
[
1353,
1353
],
"mapped",
[
1401
]
],
[
[
1354,
1354
],
"mapped",
[
1402
]
],
[
[
1355,
1355
],
"mapped",
[
1403
]
],
[
[
1356,
1356
],
"mapped",
[
1404
]
],
[
[
1357,
1357
],
"mapped",
[
1405
]
],
[
[
1358,
1358
],
"mapped",
[
1406
]
],
[
[
1359,
1359
],
"mapped",
[
1407
]
],
[
[
1360,
1360
],
"mapped",
[
1408
]
],
[
[
1361,
1361
],
"mapped",
[
1409
]
],
[
[
1362,
1362
],
"mapped",
[
1410
]
],
[
[
1363,
1363
],
"mapped",
[
1411
]
],
[
[
1364,
1364
],
"mapped",
[
1412
]
],
[
[
1365,
1365
],
"mapped",
[
1413
]
],
[
[
1366,
1366
],
"mapped",
[
1414
]
],
[
[
1367,
1368
],
"disallowed"
],
[
[
1369,
1369
],
"valid"
],
[
[
1370,
1375
],
"valid",
[
],
"NV8"
],
[
[
1376,
1376
],
"disallowed"
],
[
[
1377,
1414
],
"valid"
],
[
[
1415,
1415
],
"mapped",
[
1381,
1410
]
],
[
[
1416,
1416
],
"disallowed"
],
[
[
1417,
1417
],
"valid",
[
],
"NV8"
],
[
[
1418,
1418
],
"valid",
[
],
"NV8"
],
[
[
1419,
1420
],
"disallowed"
],
[
[
1421,
1422
],
"valid",
[
],
"NV8"
],
[
[
1423,
1423
],
"valid",
[
],
"NV8"
],
[
[
1424,
1424
],
"disallowed"
],
[
[
1425,
1441
],
"valid"
],
[
[
1442,
1442
],
"valid"
],
[
[
1443,
1455
],
"valid"
],
[
[
1456,
1465
],
"valid"
],
[
[
1466,
1466
],
"valid"
],
[
[
1467,
1469
],
"valid"
],
[
[
1470,
1470
],
"valid",
[
],
"NV8"
],
[
[
1471,
1471
],
"valid"
],
[
[
1472,
1472
],
"valid",
[
],
"NV8"
],
[
[
1473,
1474
],
"valid"
],
[
[
1475,
1475
],
"valid",
[
],
"NV8"
],
[
[
1476,
1476
],
"valid"
],
[
[
1477,
1477
],
"valid"
],
[
[
1478,
1478
],
"valid",
[
],
"NV8"
],
[
[
1479,
1479
],
"valid"
],
[
[
1480,
1487
],
"disallowed"
],
[
[
1488,
1514
],
"valid"
],
[
[
1515,
1519
],
"disallowed"
],
[
[
1520,
1524
],
"valid"
],
[
[
1525,
1535
],
"disallowed"
],
[
[
1536,
1539
],
"disallowed"
],
[
[
1540,
1540
],
"disallowed"
],
[
[
1541,
1541
],
"disallowed"
],
[
[
1542,
1546
],
"valid",
[
],
"NV8"
],
[
[
1547,
1547
],
"valid",
[
],
"NV8"
],
[
[
1548,
1548
],
"valid",
[
],
"NV8"
],
[
[
1549,
1551
],
"valid",
[
],
"NV8"
],
[
[
1552,
1557
],
"valid"
],
[
[
1558,
1562
],
"valid"
],
[
[
1563,
1563
],
"valid",
[
],
"NV8"
],
[
[
1564,
1564
],
"disallowed"
],
[
[
1565,
1565
],
"disallowed"
],
[
[
1566,
1566
],
"valid",
[
],
"NV8"
],
[
[
1567,
1567
],
"valid",
[
],
"NV8"
],
[
[
1568,
1568
],
"valid"
],
[
[
1569,
1594
],
"valid"
],
[
[
1595,
1599
],
"valid"
],
[
[
1600,
1600
],
"valid",
[
],
"NV8"
],
[
[
1601,
1618
],
"valid"
],
[
[
1619,
1621
],
"valid"
],
[
[
1622,
1624
],
"valid"
],
[
[
1625,
1630
],
"valid"
],
[
[
1631,
1631
],
"valid"
],
[
[
1632,
1641
],
"valid"
],
[
[
1642,
1645
],
"valid",
[
],
"NV8"
],
[
[
1646,
1647
],
"valid"
],
[
[
1648,
1652
],
"valid"
],
[
[
1653,
1653
],
"mapped",
[
1575,
1652
]
],
[
[
1654,
1654
],
"mapped",
[
1608,
1652
]
],
[
[
1655,
1655
],
"mapped",
[
1735,
1652
]
],
[
[
1656,
1656
],
"mapped",
[
1610,
1652
]
],
[
[
1657,
1719
],
"valid"
],
[
[
1720,
1721
],
"valid"
],
[
[
1722,
1726
],
"valid"
],
[
[
1727,
1727
],
"valid"
],
[
[
1728,
1742
],
"valid"
],
[
[
1743,
1743
],
"valid"
],
[
[
1744,
1747
],
"valid"
],
[
[
1748,
1748
],
"valid",
[
],
"NV8"
],
[
[
1749,
1756
],
"valid"
],
[
[
1757,
1757
],
"disallowed"
],
[
[
1758,
1758
],
"valid",
[
],
"NV8"
],
[
[
1759,
1768
],
"valid"
],
[
[
1769,
1769
],
"valid",
[
],
"NV8"
],
[
[
1770,
1773
],
"valid"
],
[
[
1774,
1775
],
"valid"
],
[
[
1776,
1785
],
"valid"
],
[
[
1786,
1790
],
"valid"
],
[
[
1791,
1791
],
"valid"
],
[
[
1792,
1805
],
"valid",
[
],
"NV8"
],
[
[
1806,
1806
],
"disallowed"
],
[
[
1807,
1807
],
"disallowed"
],
[
[
1808,
1836
],
"valid"
],
[
[
1837,
1839
],
"valid"
],
[
[
1840,
1866
],
"valid"
],
[
[
1867,
1868
],
"disallowed"
],
[
[
1869,
1871
],
"valid"
],
[
[
1872,
1901
],
"valid"
],
[
[
1902,
1919
],
"valid"
],
[
[
1920,
1968
],
"valid"
],
[
[
1969,
1969
],
"valid"
],
[
[
1970,
1983
],
"disallowed"
],
[
[
1984,
2037
],
"valid"
],
[
[
2038,
2042
],
"valid",
[
],
"NV8"
],
[
[
2043,
2047
],
"disallowed"
],
[
[
2048,
2093
],
"valid"
],
[
[
2094,
2095
],
"disallowed"
],
[
[
2096,
2110
],
"valid",
[
],
"NV8"
],
[
[
2111,
2111
],
"disallowed"
],
[
[
2112,
2139
],
"valid"
],
[
[
2140,
2141
],
"disallowed"
],
[
[
2142,
2142
],
"valid",
[
],
"NV8"
],
[
[
2143,
2207
],
"disallowed"
],
[
[
2208,
2208
],
"valid"
],
[
[
2209,
2209
],
"valid"
],
[
[
2210,
2220
],
"valid"
],
[
[
2221,
2226
],
"valid"
],
[
[
2227,
2228
],
"valid"
],
[
[
2229,
2274
],
"disallowed"
],
[
[
2275,
2275
],
"valid"
],
[
[
2276,
2302
],
"valid"
],
[
[
2303,
2303
],
"valid"
],
[
[
2304,
2304
],
"valid"
],
[
[
2305,
2307
],
"valid"
],
[
[
2308,
2308
],
"valid"
],
[
[
2309,
2361
],
"valid"
],
[
[
2362,
2363
],
"valid"
],
[
[
2364,
2381
],
"valid"
],
[
[
2382,
2382
],
"valid"
],
[
[
2383,
2383
],
"valid"
],
[
[
2384,
2388
],
"valid"
],
[
[
2389,
2389
],
"valid"
],
[
[
2390,
2391
],
"valid"
],
[
[
2392,
2392
],
"mapped",
[
2325,
2364
]
],
[
[
2393,
2393
],
"mapped",
[
2326,
2364
]
],
[
[
2394,
2394
],
"mapped",
[
2327,
2364
]
],
[
[
2395,
2395
],
"mapped",
[
2332,
2364
]
],
[
[
2396,
2396
],
"mapped",
[
2337,
2364
]
],
[
[
2397,
2397
],
"mapped",
[
2338,
2364
]
],
[
[
2398,
2398
],
"mapped",
[
2347,
2364
]
],
[
[
2399,
2399
],
"mapped",
[
2351,
2364
]
],
[
[
2400,
2403
],
"valid"
],
[
[
2404,
2405
],
"valid",
[
],
"NV8"
],
[
[
2406,
2415
],
"valid"
],
[
[
2416,
2416
],
"valid",
[
],
"NV8"
],
[
[
2417,
2418
],
"valid"
],
[
[
2419,
2423
],
"valid"
],
[
[
2424,
2424
],
"valid"
],
[
[
2425,
2426
],
"valid"
],
[
[
2427,
2428
],
"valid"
],
[
[
2429,
2429
],
"valid"
],
[
[
2430,
2431
],
"valid"
],
[
[
2432,
2432
],
"valid"
],
[
[
2433,
2435
],
"valid"
],
[
[
2436,
2436
],
"disallowed"
],
[
[
2437,
2444
],
"valid"
],
[
[
2445,
2446
],
"disallowed"
],
[
[
2447,
2448
],
"valid"
],
[
[
2449,
2450
],
"disallowed"
],
[
[
2451,
2472
],
"valid"
],
[
[
2473,
2473
],
"disallowed"
],
[
[
2474,
2480
],
"valid"
],
[
[
2481,
2481
],
"disallowed"
],
[
[
2482,
2482
],
"valid"
],
[
[
2483,
2485
],
"disallowed"
],
[
[
2486,
2489
],
"valid"
],
[
[
2490,
2491
],
"disallowed"
],
[
[
2492,
2492
],
"valid"
],
[
[
2493,
2493
],
"valid"
],
[
[
2494,
2500
],
"valid"
],
[
[
2501,
2502
],
"disallowed"
],
[
[
2503,
2504
],
"valid"
],
[
[
2505,
2506
],
"disallowed"
],
[
[
2507,
2509
],
"valid"
],
[
[
2510,
2510
],
"valid"
],
[
[
2511,
2518
],
"disallowed"
],
[
[
2519,
2519
],
"valid"
],
[
[
2520,
2523
],
"disallowed"
],
[
[
2524,
2524
],
"mapped",
[
2465,
2492
]
],
[
[
2525,
2525
],
"mapped",
[
2466,
2492
]
],
[
[
2526,
2526
],
"disallowed"
],
[
[
2527,
2527
],
"mapped",
[
2479,
2492
]
],
[
[
2528,
2531
],
"valid"
],
[
[
2532,
2533
],
"disallowed"
],
[
[
2534,
2545
],
"valid"
],
[
[
2546,
2554
],
"valid",
[
],
"NV8"
],
[
[
2555,
2555
],
"valid",
[
],
"NV8"
],
[
[
2556,
2560
],
"disallowed"
],
[
[
2561,
2561
],
"valid"
],
[
[
2562,
2562
],
"valid"
],
[
[
2563,
2563
],
"valid"
],
[
[
2564,
2564
],
"disallowed"
],
[
[
2565,
2570
],
"valid"
],
[
[
2571,
2574
],
"disallowed"
],
[
[
2575,
2576
],
"valid"
],
[
[
2577,
2578
],
"disallowed"
],
[
[
2579,
2600
],
"valid"
],
[
[
2601,
2601
],
"disallowed"
],
[
[
2602,
2608
],
"valid"
],
[
[
2609,
2609
],
"disallowed"
],
[
[
2610,
2610
],
"valid"
],
[
[
2611,
2611
],
"mapped",
[
2610,
2620
]
],
[
[
2612,
2612
],
"disallowed"
],
[
[
2613,
2613
],
"valid"
],
[
[
2614,
2614
],
"mapped",
[
2616,
2620
]
],
[
[
2615,
2615
],
"disallowed"
],
[
[
2616,
2617
],
"valid"
],
[
[
2618,
2619
],
"disallowed"
],
[
[
2620,
2620
],
"valid"
],
[
[
2621,
2621
],
"disallowed"
],
[
[
2622,
2626
],
"valid"
],
[
[
2627,
2630
],
"disallowed"
],
[
[
2631,
2632
],
"valid"
],
[
[
2633,
2634
],
"disallowed"
],
[
[
2635,
2637
],
"valid"
],
[
[
2638,
2640
],
"disallowed"
],
[
[
2641,
2641
],
"valid"
],
[
[
2642,
2648
],
"disallowed"
],
[
[
2649,
2649
],
"mapped",
[
2582,
2620
]
],
[
[
2650,
2650
],
"mapped",
[
2583,
2620
]
],
[
[
2651,
2651
],
"mapped",
[
2588,
2620
]
],
[
[
2652,
2652
],
"valid"
],
[
[
2653,
2653
],
"disallowed"
],
[
[
2654,
2654
],
"mapped",
[
2603,
2620
]
],
[
[
2655,
2661
],
"disallowed"
],
[
[
2662,
2676
],
"valid"
],
[
[
2677,
2677
],
"valid"
],
[
[
2678,
2688
],
"disallowed"
],
[
[
2689,
2691
],
"valid"
],
[
[
2692,
2692
],
"disallowed"
],
[
[
2693,
2699
],
"valid"
],
[
[
2700,
2700
],
"valid"
],
[
[
2701,
2701
],
"valid"
],
[
[
2702,
2702
],
"disallowed"
],
[
[
2703,
2705
],
"valid"
],
[
[
2706,
2706
],
"disallowed"
],
[
[
2707,
2728
],
"valid"
],
[
[
2729,
2729
],
"disallowed"
],
[
[
2730,
2736
],
"valid"
],
[
[
2737,
2737
],
"disallowed"
],
[
[
2738,
2739
],
"valid"
],
[
[
2740,
2740
],
"disallowed"
],
[
[
2741,
2745
],
"valid"
],
[
[
2746,
2747
],
"disallowed"
],
[
[
2748,
2757
],
"valid"
],
[
[
2758,
2758
],
"disallowed"
],
[
[
2759,
2761
],
"valid"
],
[
[
2762,
2762
],
"disallowed"
],
[
[
2763,
2765
],
"valid"
],
[
[
2766,
2767
],
"disallowed"
],
[
[
2768,
2768
],
"valid"
],
[
[
2769,
2783
],
"disallowed"
],
[
[
2784,
2784
],
"valid"
],
[
[
2785,
2787
],
"valid"
],
[
[
2788,
2789
],
"disallowed"
],
[
[
2790,
2799
],
"valid"
],
[
[
2800,
2800
],
"valid",
[
],
"NV8"
],
[
[
2801,
2801
],
"valid",
[
],
"NV8"
],
[
[
2802,
2808
],
"disallowed"
],
[
[
2809,
2809
],
"valid"
],
[
[
2810,
2816
],
"disallowed"
],
[
[
2817,
2819
],
"valid"
],
[
[
2820,
2820
],
"disallowed"
],
[
[
2821,
2828
],
"valid"
],
[
[
2829,
2830
],
"disallowed"
],
[
[
2831,
2832
],
"valid"
],
[
[
2833,
2834
],
"disallowed"
],
[
[
2835,
2856
],
"valid"
],
[
[
2857,
2857
],
"disallowed"
],
[
[
2858,
2864
],
"valid"
],
[
[
2865,
2865
],
"disallowed"
],
[
[
2866,
2867
],
"valid"
],
[
[
2868,
2868
],
"disallowed"
],
[
[
2869,
2869
],
"valid"
],
[
[
2870,
2873
],
"valid"
],
[
[
2874,
2875
],
"disallowed"
],
[
[
2876,
2883
],
"valid"
],
[
[
2884,
2884
],
"valid"
],
[
[
2885,
2886
],
"disallowed"
],
[
[
2887,
2888
],
"valid"
],
[
[
2889,
2890
],
"disallowed"
],
[
[
2891,
2893
],
"valid"
],
[
[
2894,
2901
],
"disallowed"
],
[
[
2902,
2903
],
"valid"
],
[
[
2904,
2907
],
"disallowed"
],
[
[
2908,
2908
],
"mapped",
[
2849,
2876
]
],
[
[
2909,
2909
],
"mapped",
[
2850,
2876
]
],
[
[
2910,
2910
],
"disallowed"
],
[
[
2911,
2913
],
"valid"
],
[
[
2914,
2915
],
"valid"
],
[
[
2916,
2917
],
"disallowed"
],
[
[
2918,
2927
],
"valid"
],
[
[
2928,
2928
],
"valid",
[
],
"NV8"
],
[
[
2929,
2929
],
"valid"
],
[
[
2930,
2935
],
"valid",
[
],
"NV8"
],
[
[
2936,
2945
],
"disallowed"
],
[
[
2946,
2947
],
"valid"
],
[
[
2948,
2948
],
"disallowed"
],
[
[
2949,
2954
],
"valid"
],
[
[
2955,
2957
],
"disallowed"
],
[
[
2958,
2960
],
"valid"
],
[
[
2961,
2961
],
"disallowed"
],
[
[
2962,
2965
],
"valid"
],
[
[
2966,
2968
],
"disallowed"
],
[
[
2969,
2970
],
"valid"
],
[
[
2971,
2971
],
"disallowed"
],
[
[
2972,
2972
],
"valid"
],
[
[
2973,
2973
],
"disallowed"
],
[
[
2974,
2975
],
"valid"
],
[
[
2976,
2978
],
"disallowed"
],
[
[
2979,
2980
],
"valid"
],
[
[
2981,
2983
],
"disallowed"
],
[
[
2984,
2986
],
"valid"
],
[
[
2987,
2989
],
"disallowed"
],
[
[
2990,
2997
],
"valid"
],
[
[
2998,
2998
],
"valid"
],
[
[
2999,
3001
],
"valid"
],
[
[
3002,
3005
],
"disallowed"
],
[
[
3006,
3010
],
"valid"
],
[
[
3011,
3013
],
"disallowed"
],
[
[
3014,
3016
],
"valid"
],
[
[
3017,
3017
],
"disallowed"
],
[
[
3018,
3021
],
"valid"
],
[
[
3022,
3023
],
"disallowed"
],
[
[
3024,
3024
],
"valid"
],
[
[
3025,
3030
],
"disallowed"
],
[
[
3031,
3031
],
"valid"
],
[
[
3032,
3045
],
"disallowed"
],
[
[
3046,
3046
],
"valid"
],
[
[
3047,
3055
],
"valid"
],
[
[
3056,
3058
],
"valid",
[
],
"NV8"
],
[
[
3059,
3066
],
"valid",
[
],
"NV8"
],
[
[
3067,
3071
],
"disallowed"
],
[
[
3072,
3072
],
"valid"
],
[
[
3073,
3075
],
"valid"
],
[
[
3076,
3076
],
"disallowed"
],
[
[
3077,
3084
],
"valid"
],
[
[
3085,
3085
],
"disallowed"
],
[
[
3086,
3088
],
"valid"
],
[
[
3089,
3089
],
"disallowed"
],
[
[
3090,
3112
],
"valid"
],
[
[
3113,
3113
],
"disallowed"
],
[
[
3114,
3123
],
"valid"
],
[
[
3124,
3124
],
"valid"
],
[
[
3125,
3129
],
"valid"
],
[
[
3130,
3132
],
"disallowed"
],
[
[
3133,
3133
],
"valid"
],
[
[
3134,
3140
],
"valid"
],
[
[
3141,
3141
],
"disallowed"
],
[
[
3142,
3144
],
"valid"
],
[
[
3145,
3145
],
"disallowed"
],
[
[
3146,
3149
],
"valid"
],
[
[
3150,
3156
],
"disallowed"
],
[
[
3157,
3158
],
"valid"
],
[
[
3159,
3159
],
"disallowed"
],
[
[
3160,
3161
],
"valid"
],
[
[
3162,
3162
],
"valid"
],
[
[
3163,
3167
],
"disallowed"
],
[
[
3168,
3169
],
"valid"
],
[
[
3170,
3171
],
"valid"
],
[
[
3172,
3173
],
"disallowed"
],
[
[
3174,
3183
],
"valid"
],
[
[
3184,
3191
],
"disallowed"
],
[
[
3192,
3199
],
"valid",
[
],
"NV8"
],
[
[
3200,
3200
],
"disallowed"
],
[
[
3201,
3201
],
"valid"
],
[
[
3202,
3203
],
"valid"
],
[
[
3204,
3204
],
"disallowed"
],
[
[
3205,
3212
],
"valid"
],
[
[
3213,
3213
],
"disallowed"
],
[
[
3214,
3216
],
"valid"
],
[
[
3217,
3217
],
"disallowed"
],
[
[
3218,
3240
],
"valid"
],
[
[
3241,
3241
],
"disallowed"
],
[
[
3242,
3251
],
"valid"
],
[
[
3252,
3252
],
"disallowed"
],
[
[
3253,
3257
],
"valid"
],
[
[
3258,
3259
],
"disallowed"
],
[
[
3260,
3261
],
"valid"
],
[
[
3262,
3268
],
"valid"
],
[
[
3269,
3269
],
"disallowed"
],
[
[
3270,
3272
],
"valid"
],
[
[
3273,
3273
],
"disallowed"
],
[
[
3274,
3277
],
"valid"
],
[
[
3278,
3284
],
"disallowed"
],
[
[
3285,
3286
],
"valid"
],
[
[
3287,
3293
],
"disallowed"
],
[
[
3294,
3294
],
"valid"
],
[
[
3295,
3295
],
"disallowed"
],
[
[
3296,
3297
],
"valid"
],
[
[
3298,
3299
],
"valid"
],
[
[
3300,
3301
],
"disallowed"
],
[
[
3302,
3311
],
"valid"
],
[
[
3312,
3312
],
"disallowed"
],
[
[
3313,
3314
],
"valid"
],
[
[
3315,
3328
],
"disallowed"
],
[
[
3329,
3329
],
"valid"
],
[
[
3330,
3331
],
"valid"
],
[
[
3332,
3332
],
"disallowed"
],
[
[
3333,
3340
],
"valid"
],
[
[
3341,
3341
],
"disallowed"
],
[
[
3342,
3344
],
"valid"
],
[
[
3345,
3345
],
"disallowed"
],
[
[
3346,
3368
],
"valid"
],
[
[
3369,
3369
],
"valid"
],
[
[
3370,
3385
],
"valid"
],
[
[
3386,
3386
],
"valid"
],
[
[
3387,
3388
],
"disallowed"
],
[
[
3389,
3389
],
"valid"
],
[
[
3390,
3395
],
"valid"
],
[
[
3396,
3396
],
"valid"
],
[
[
3397,
3397
],
"disallowed"
],
[
[
3398,
3400
],
"valid"
],
[
[
3401,
3401
],
"disallowed"
],
[
[
3402,
3405
],
"valid"
],
[
[
3406,
3406
],
"valid"
],
[
[
3407,
3414
],
"disallowed"
],
[
[
3415,
3415
],
"valid"
],
[
[
3416,
3422
],
"disallowed"
],
[
[
3423,
3423
],
"valid"
],
[
[
3424,
3425
],
"valid"
],
[
[
3426,
3427
],
"valid"
],
[
[
3428,
3429
],
"disallowed"
],
[
[
3430,
3439
],
"valid"
],
[
[
3440,
3445
],
"valid",
[
],
"NV8"
],
[
[
3446,
3448
],
"disallowed"
],
[
[
3449,
3449
],
"valid",
[
],
"NV8"
],
[
[
3450,
3455
],
"valid"
],
[
[
3456,
3457
],
"disallowed"
],
[
[
3458,
3459
],
"valid"
],
[
[
3460,
3460
],
"disallowed"
],
[
[
3461,
3478
],
"valid"
],
[
[
3479,
3481
],
"disallowed"
],
[
[
3482,
3505
],
"valid"
],
[
[
3506,
3506
],
"disallowed"
],
[
[
3507,
3515
],
"valid"
],
[
[
3516,
3516
],
"disallowed"
],
[
[
3517,
3517
],
"valid"
],
[
[
3518,
3519
],
"disallowed"
],
[
[
3520,
3526
],
"valid"
],
[
[
3527,
3529
],
"disallowed"
],
[
[
3530,
3530
],
"valid"
],
[
[
3531,
3534
],
"disallowed"
],
[
[
3535,
3540
],
"valid"
],
[
[
3541,
3541
],
"disallowed"
],
[
[
3542,
3542
],
"valid"
],
[
[
3543,
3543
],
"disallowed"
],
[
[
3544,
3551
],
"valid"
],
[
[
3552,
3557
],
"disallowed"
],
[
[
3558,
3567
],
"valid"
],
[
[
3568,
3569
],
"disallowed"
],
[
[
3570,
3571
],
"valid"
],
[
[
3572,
3572
],
"valid",
[
],
"NV8"
],
[
[
3573,
3584
],
"disallowed"
],
[
[
3585,
3634
],
"valid"
],
[
[
3635,
3635
],
"mapped",
[
3661,
3634
]
],
[
[
3636,
3642
],
"valid"
],
[
[
3643,
3646
],
"disallowed"
],
[
[
3647,
3647
],
"valid",
[
],
"NV8"
],
[
[
3648,
3662
],
"valid"
],
[
[
3663,
3663
],
"valid",
[
],
"NV8"
],
[
[
3664,
3673
],
"valid"
],
[
[
3674,
3675
],
"valid",
[
],
"NV8"
],
[
[
3676,
3712
],
"disallowed"
],
[
[
3713,
3714
],
"valid"
],
[
[
3715,
3715
],
"disallowed"
],
[
[
3716,
3716
],
"valid"
],
[
[
3717,
3718
],
"disallowed"
],
[
[
3719,
3720
],
"valid"
],
[
[
3721,
3721
],
"disallowed"
],
[
[
3722,
3722
],
"valid"
],
[
[
3723,
3724
],
"disallowed"
],
[
[
3725,
3725
],
"valid"
],
[
[
3726,
3731
],
"disallowed"
],
[
[
3732,
3735
],
"valid"
],
[
[
3736,
3736
],
"disallowed"
],
[
[
3737,
3743
],
"valid"
],
[
[
3744,
3744
],
"disallowed"
],
[
[
3745,
3747
],
"valid"
],
[
[
3748,
3748
],
"disallowed"
],
[
[
3749,
3749
],
"valid"
],
[
[
3750,
3750
],
"disallowed"
],
[
[
3751,
3751
],
"valid"
],
[
[
3752,
3753
],
"disallowed"
],
[
[
3754,
3755
],
"valid"
],
[
[
3756,
3756
],
"disallowed"
],
[
[
3757,
3762
],
"valid"
],
[
[
3763,
3763
],
"mapped",
[
3789,
3762
]
],
[
[
3764,
3769
],
"valid"
],
[
[
3770,
3770
],
"disallowed"
],
[
[
3771,
3773
],
"valid"
],
[
[
3774,
3775
],
"disallowed"
],
[
[
3776,
3780
],
"valid"
],
[
[
3781,
3781
],
"disallowed"
],
[
[
3782,
3782
],
"valid"
],
[
[
3783,
3783
],
"disallowed"
],
[
[
3784,
3789
],
"valid"
],
[
[
3790,
3791
],
"disallowed"
],
[
[
3792,
3801
],
"valid"
],
[
[
3802,
3803
],
"disallowed"
],
[
[
3804,
3804
],
"mapped",
[
3755,
3737
]
],
[
[
3805,
3805
],
"mapped",
[
3755,
3745
]
],
[
[
3806,
3807
],
"valid"
],
[
[
3808,
3839
],
"disallowed"
],
[
[
3840,
3840
],
"valid"
],
[
[
3841,
3850
],
"valid",
[
],
"NV8"
],
[
[
3851,
3851
],
"valid"
],
[
[
3852,
3852
],
"mapped",
[
3851
]
],
[
[
3853,
3863
],
"valid",
[
],
"NV8"
],
[
[
3864,
3865
],
"valid"
],
[
[
3866,
3871
],
"valid",
[
],
"NV8"
],
[
[
3872,
3881
],
"valid"
],
[
[
3882,
3892
],
"valid",
[
],
"NV8"
],
[
[
3893,
3893
],
"valid"
],
[
[
3894,
3894
],
"valid",
[
],
"NV8"
],
[
[
3895,
3895
],
"valid"
],
[
[
3896,
3896
],
"valid",
[
],
"NV8"
],
[
[
3897,
3897
],
"valid"
],
[
[
3898,
3901
],
"valid",
[
],
"NV8"
],
[
[
3902,
3906
],
"valid"
],
[
[
3907,
3907
],
"mapped",
[
3906,
4023
]
],
[
[
3908,
3911
],
"valid"
],
[
[
3912,
3912
],
"disallowed"
],
[
[
3913,
3916
],
"valid"
],
[
[
3917,
3917
],
"mapped",
[
3916,
4023
]
],
[
[
3918,
3921
],
"valid"
],
[
[
3922,
3922
],
"mapped",
[
3921,
4023
]
],
[
[
3923,
3926
],
"valid"
],
[
[
3927,
3927
],
"mapped",
[
3926,
4023
]
],
[
[
3928,
3931
],
"valid"
],
[
[
3932,
3932
],
"mapped",
[
3931,
4023
]
],
[
[
3933,
3944
],
"valid"
],
[
[
3945,
3945
],
"mapped",
[
3904,
4021
]
],
[
[
3946,
3946
],
"valid"
],
[
[
3947,
3948
],
"valid"
],
[
[
3949,
3952
],
"disallowed"
],
[
[
3953,
3954
],
"valid"
],
[
[
3955,
3955
],
"mapped",
[
3953,
3954
]
],
[
[
3956,
3956
],
"valid"
],
[
[
3957,
3957
],
"mapped",
[
3953,
3956
]
],
[
[
3958,
3958
],
"mapped",
[
4018,
3968
]
],
[
[
3959,
3959
],
"mapped",
[
4018,
3953,
3968
]
],
[
[
3960,
3960
],
"mapped",
[
4019,
3968
]
],
[
[
3961,
3961
],
"mapped",
[
4019,
3953,
3968
]
],
[
[
3962,
3968
],
"valid"
],
[
[
3969,
3969
],
"mapped",
[
3953,
3968
]
],
[
[
3970,
3972
],
"valid"
],
[
[
3973,
3973
],
"valid",
[
],
"NV8"
],
[
[
3974,
3979
],
"valid"
],
[
[
3980,
3983
],
"valid"
],
[
[
3984,
3986
],
"valid"
],
[
[
3987,
3987
],
"mapped",
[
3986,
4023
]
],
[
[
3988,
3989
],
"valid"
],
[
[
3990,
3990
],
"valid"
],
[
[
3991,
3991
],
"valid"
],
[
[
3992,
3992
],
"disallowed"
],
[
[
3993,
3996
],
"valid"
],
[
[
3997,
3997
],
"mapped",
[
3996,
4023
]
],
[
[
3998,
4001
],
"valid"
],
[
[
4002,
4002
],
"mapped",
[
4001,
4023
]
],
[
[
4003,
4006
],
"valid"
],
[
[
4007,
4007
],
"mapped",
[
4006,
4023
]
],
[
[
4008,
4011
],
"valid"
],
[
[
4012,
4012
],
"mapped",
[
4011,
4023
]
],
[
[
4013,
4013
],
"valid"
],
[
[
4014,
4016
],
"valid"
],
[
[
4017,
4023
],
"valid"
],
[
[
4024,
4024
],
"valid"
],
[
[
4025,
4025
],
"mapped",
[
3984,
4021
]
],
[
[
4026,
4028
],
"valid"
],
[
[
4029,
4029
],
"disallowed"
],
[
[
4030,
4037
],
"valid",
[
],
"NV8"
],
[
[
4038,
4038
],
"valid"
],
[
[
4039,
4044
],
"valid",
[
],
"NV8"
],
[
[
4045,
4045
],
"disallowed"
],
[
[
4046,
4046
],
"valid",
[
],
"NV8"
],
[
[
4047,
4047
],
"valid",
[
],
"NV8"
],
[
[
4048,
4049
],
"valid",
[
],
"NV8"
],
[
[
4050,
4052
],
"valid",
[
],
"NV8"
],
[
[
4053,
4056
],
"valid",
[
],
"NV8"
],
[
[
4057,
4058
],
"valid",
[
],
"NV8"
],
[
[
4059,
4095
],
"disallowed"
],
[
[
4096,
4129
],
"valid"
],
[
[
4130,
4130
],
"valid"
],
[
[
4131,
4135
],
"valid"
],
[
[
4136,
4136
],
"valid"
],
[
[
4137,
4138
],
"valid"
],
[
[
4139,
4139
],
"valid"
],
[
[
4140,
4146
],
"valid"
],
[
[
4147,
4149
],
"valid"
],
[
[
4150,
4153
],
"valid"
],
[
[
4154,
4159
],
"valid"
],
[
[
4160,
4169
],
"valid"
],
[
[
4170,
4175
],
"valid",
[
],
"NV8"
],
[
[
4176,
4185
],
"valid"
],
[
[
4186,
4249
],
"valid"
],
[
[
4250,
4253
],
"valid"
],
[
[
4254,
4255
],
"valid",
[
],
"NV8"
],
[
[
4256,
4293
],
"disallowed"
],
[
[
4294,
4294
],
"disallowed"
],
[
[
4295,
4295
],
"mapped",
[
11559
]
],
[
[
4296,
4300
],
"disallowed"
],
[
[
4301,
4301
],
"mapped",
[
11565
]
],
[
[
4302,
4303
],
"disallowed"
],
[
[
4304,
4342
],
"valid"
],
[
[
4343,
4344
],
"valid"
],
[
[
4345,
4346
],
"valid"
],
[
[
4347,
4347
],
"valid",
[
],
"NV8"
],
[
[
4348,
4348
],
"mapped",
[
4316
]
],
[
[
4349,
4351
],
"valid"
],
[
[
4352,
4441
],
"valid",
[
],
"NV8"
],
[
[
4442,
4446
],
"valid",
[
],
"NV8"
],
[
[
4447,
4448
],
"disallowed"
],
[
[
4449,
4514
],
"valid",
[
],
"NV8"
],
[
[
4515,
4519
],
"valid",
[
],
"NV8"
],
[
[
4520,
4601
],
"valid",
[
],
"NV8"
],
[
[
4602,
4607
],
"valid",
[
],
"NV8"
],
[
[
4608,
4614
],
"valid"
],
[
[
4615,
4615
],
"valid"
],
[
[
4616,
4678
],
"valid"
],
[
[
4679,
4679
],
"valid"
],
[
[
4680,
4680
],
"valid"
],
[
[
4681,
4681
],
"disallowed"
],
[
[
4682,
4685
],
"valid"
],
[
[
4686,
4687
],
"disallowed"
],
[
[
4688,
4694
],
"valid"
],
[
[
4695,
4695
],
"disallowed"
],
[
[
4696,
4696
],
"valid"
],
[
[
4697,
4697
],
"disallowed"
],
[
[
4698,
4701
],
"valid"
],
[
[
4702,
4703
],
"disallowed"
],
[
[
4704,
4742
],
"valid"
],
[
[
4743,
4743
],
"valid"
],
[
[
4744,
4744
],
"valid"
],
[
[
4745,
4745
],
"disallowed"
],
[
[
4746,
4749
],
"valid"
],
[
[
4750,
4751
],
"disallowed"
],
[
[
4752,
4782
],
"valid"
],
[
[
4783,
4783
],
"valid"
],
[
[
4784,
4784
],
"valid"
],
[
[
4785,
4785
],
"disallowed"
],
[
[
4786,
4789
],
"valid"
],
[
[
4790,
4791
],
"disallowed"
],
[
[
4792,
4798
],
"valid"
],
[
[
4799,
4799
],
"disallowed"
],
[
[
4800,
4800
],
"valid"
],
[
[
4801,
4801
],
"disallowed"
],
[
[
4802,
4805
],
"valid"
],
[
[
4806,
4807
],
"disallowed"
],
[
[
4808,
4814
],
"valid"
],
[
[
4815,
4815
],
"valid"
],
[
[
4816,
4822
],
"valid"
],
[
[
4823,
4823
],
"disallowed"
],
[
[
4824,
4846
],
"valid"
],
[
[
4847,
4847
],
"valid"
],
[
[
4848,
4878
],
"valid"
],
[
[
4879,
4879
],
"valid"
],
[
[
4880,
4880
],
"valid"
],
[
[
4881,
4881
],
"disallowed"
],
[
[
4882,
4885
],
"valid"
],
[
[
4886,
4887
],
"disallowed"
],
[
[
4888,
4894
],
"valid"
],
[
[
4895,
4895
],
"valid"
],
[
[
4896,
4934
],
"valid"
],
[
[
4935,
4935
],
"valid"
],
[
[
4936,
4954
],
"valid"
],
[
[
4955,
4956
],
"disallowed"
],
[
[
4957,
4958
],
"valid"
],
[
[
4959,
4959
],
"valid"
],
[
[
4960,
4960
],
"valid",
[
],
"NV8"
],
[
[
4961,
4988
],
"valid",
[
],
"NV8"
],
[
[
4989,
4991
],
"disallowed"
],
[
[
4992,
5007
],
"valid"
],
[
[
5008,
5017
],
"valid",
[
],
"NV8"
],
[
[
5018,
5023
],
"disallowed"
],
[
[
5024,
5108
],
"valid"
],
[
[
5109,
5109
],
"valid"
],
[
[
5110,
5111
],
"disallowed"
],
[
[
5112,
5112
],
"mapped",
[
5104
]
],
[
[
5113,
5113
],
"mapped",
[
5105
]
],
[
[
5114,
5114
],
"mapped",
[
5106
]
],
[
[
5115,
5115
],
"mapped",
[
5107
]
],
[
[
5116,
5116
],
"mapped",
[
5108
]
],
[
[
5117,
5117
],
"mapped",
[
5109
]
],
[
[
5118,
5119
],
"disallowed"
],
[
[
5120,
5120
],
"valid",
[
],
"NV8"
],
[
[
5121,
5740
],
"valid"
],
[
[
5741,
5742
],
"valid",
[
],
"NV8"
],
[
[
5743,
5750
],
"valid"
],
[
[
5751,
5759
],
"valid"
],
[
[
5760,
5760
],
"disallowed"
],
[
[
5761,
5786
],
"valid"
],
[
[
5787,
5788
],
"valid",
[
],
"NV8"
],
[
[
5789,
5791
],
"disallowed"
],
[
[
5792,
5866
],
"valid"
],
[
[
5867,
5872
],
"valid",
[
],
"NV8"
],
[
[
5873,
5880
],
"valid"
],
[
[
5881,
5887
],
"disallowed"
],
[
[
5888,
5900
],
"valid"
],
[
[
5901,
5901
],
"disallowed"
],
[
[
5902,
5908
],
"valid"
],
[
[
5909,
5919
],
"disallowed"
],
[
[
5920,
5940
],
"valid"
],
[
[
5941,
5942
],
"valid",
[
],
"NV8"
],
[
[
5943,
5951
],
"disallowed"
],
[
[
5952,
5971
],
"valid"
],
[
[
5972,
5983
],
"disallowed"
],
[
[
5984,
5996
],
"valid"
],
[
[
5997,
5997
],
"disallowed"
],
[
[
5998,
6000
],
"valid"
],
[
[
6001,
6001
],
"disallowed"
],
[
[
6002,
6003
],
"valid"
],
[
[
6004,
6015
],
"disallowed"
],
[
[
6016,
6067
],
"valid"
],
[
[
6068,
6069
],
"disallowed"
],
[
[
6070,
6099
],
"valid"
],
[
[
6100,
6102
],
"valid",
[
],
"NV8"
],
[
[
6103,
6103
],
"valid"
],
[
[
6104,
6107
],
"valid",
[
],
"NV8"
],
[
[
6108,
6108
],
"valid"
],
[
[
6109,
6109
],
"valid"
],
[
[
6110,
6111
],
"disallowed"
],
[
[
6112,
6121
],
"valid"
],
[
[
6122,
6127
],
"disallowed"
],
[
[
6128,
6137
],
"valid",
[
],
"NV8"
],
[
[
6138,
6143
],
"disallowed"
],
[
[
6144,
6149
],
"valid",
[
],
"NV8"
],
[
[
6150,
6150
],
"disallowed"
],
[
[
6151,
6154
],
"valid",
[
],
"NV8"
],
[
[
6155,
6157
],
"ignored"
],
[
[
6158,
6158
],
"disallowed"
],
[
[
6159,
6159
],
"disallowed"
],
[
[
6160,
6169
],
"valid"
],
[
[
6170,
6175
],
"disallowed"
],
[
[
6176,
6263
],
"valid"
],
[
[
6264,
6271
],
"disallowed"
],
[
[
6272,
6313
],
"valid"
],
[
[
6314,
6314
],
"valid"
],
[
[
6315,
6319
],
"disallowed"
],
[
[
6320,
6389
],
"valid"
],
[
[
6390,
6399
],
"disallowed"
],
[
[
6400,
6428
],
"valid"
],
[
[
6429,
6430
],
"valid"
],
[
[
6431,
6431
],
"disallowed"
],
[
[
6432,
6443
],
"valid"
],
[
[
6444,
6447
],
"disallowed"
],
[
[
6448,
6459
],
"valid"
],
[
[
6460,
6463
],
"disallowed"
],
[
[
6464,
6464
],
"valid",
[
],
"NV8"
],
[
[
6465,
6467
],
"disallowed"
],
[
[
6468,
6469
],
"valid",
[
],
"NV8"
],
[
[
6470,
6509
],
"valid"
],
[
[
6510,
6511
],
"disallowed"
],
[
[
6512,
6516
],
"valid"
],
[
[
6517,
6527
],
"disallowed"
],
[
[
6528,
6569
],
"valid"
],
[
[
6570,
6571
],
"valid"
],
[
[
6572,
6575
],
"disallowed"
],
[
[
6576,
6601
],
"valid"
],
[
[
6602,
6607
],
"disallowed"
],
[
[
6608,
6617
],
"valid"
],
[
[
6618,
6618
],
"valid",
[
],
"XV8"
],
[
[
6619,
6621
],
"disallowed"
],
[
[
6622,
6623
],
"valid",
[
],
"NV8"
],
[
[
6624,
6655
],
"valid",
[
],
"NV8"
],
[
[
6656,
6683
],
"valid"
],
[
[
6684,
6685
],
"disallowed"
],
[
[
6686,
6687
],
"valid",
[
],
"NV8"
],
[
[
6688,
6750
],
"valid"
],
[
[
6751,
6751
],
"disallowed"
],
[
[
6752,
6780
],
"valid"
],
[
[
6781,
6782
],
"disallowed"
],
[
[
6783,
6793
],
"valid"
],
[
[
6794,
6799
],
"disallowed"
],
[
[
6800,
6809
],
"valid"
],
[
[
6810,
6815
],
"disallowed"
],
[
[
6816,
6822
],
"valid",
[
],
"NV8"
],
[
[
6823,
6823
],
"valid"
],
[
[
6824,
6829
],
"valid",
[
],
"NV8"
],
[
[
6830,
6831
],
"disallowed"
],
[
[
6832,
6845
],
"valid"
],
[
[
6846,
6846
],
"valid",
[
],
"NV8"
],
[
[
6847,
6911
],
"disallowed"
],
[
[
6912,
6987
],
"valid"
],
[
[
6988,
6991
],
"disallowed"
],
[
[
6992,
7001
],
"valid"
],
[
[
7002,
7018
],
"valid",
[
],
"NV8"
],
[
[
7019,
7027
],
"valid"
],
[
[
7028,
7036
],
"valid",
[
],
"NV8"
],
[
[
7037,
7039
],
"disallowed"
],
[
[
7040,
7082
],
"valid"
],
[
[
7083,
7085
],
"valid"
],
[
[
7086,
7097
],
"valid"
],
[
[
7098,
7103
],
"valid"
],
[
[
7104,
7155
],
"valid"
],
[
[
7156,
7163
],
"disallowed"
],
[
[
7164,
7167
],
"valid",
[
],
"NV8"
],
[
[
7168,
7223
],
"valid"
],
[
[
7224,
7226
],
"disallowed"
],
[
[
7227,
7231
],
"valid",
[
],
"NV8"
],
[
[
7232,
7241
],
"valid"
],
[
[
7242,
7244
],
"disallowed"
],
[
[
7245,
7293
],
"valid"
],
[
[
7294,
7295
],
"valid",
[
],
"NV8"
],
[
[
7296,
7359
],
"disallowed"
],
[
[
7360,
7367
],
"valid",
[
],
"NV8"
],
[
[
7368,
7375
],
"disallowed"
],
[
[
7376,
7378
],
"valid"
],
[
[
7379,
7379
],
"valid",
[
],
"NV8"
],
[
[
7380,
7410
],
"valid"
],
[
[
7411,
7414
],
"valid"
],
[
[
7415,
7415
],
"disallowed"
],
[
[
7416,
7417
],
"valid"
],
[
[
7418,
7423
],
"disallowed"
],
[
[
7424,
7467
],
"valid"
],
[
[
7468,
7468
],
"mapped",
[
97
]
],
[
[
7469,
7469
],
"mapped",
[
230
]
],
[
[
7470,
7470
],
"mapped",
[
98
]
],
[
[
7471,
7471
],
"valid"
],
[
[
7472,
7472
],
"mapped",
[
100
]
],
[
[
7473,
7473
],
"mapped",
[
101
]
],
[
[
7474,
7474
],
"mapped",
[
477
]
],
[
[
7475,
7475
],
"mapped",
[
103
]
],
[
[
7476,
7476
],
"mapped",
[
104
]
],
[
[
7477,
7477
],
"mapped",
[
105
]
],
[
[
7478,
7478
],
"mapped",
[
106
]
],
[
[
7479,
7479
],
"mapped",
[
107
]
],
[
[
7480,
7480
],
"mapped",
[
108
]
],
[
[
7481,
7481
],
"mapped",
[
109
]
],
[
[
7482,
7482
],
"mapped",
[
110
]
],
[
[
7483,
7483
],
"valid"
],
[
[
7484,
7484
],
"mapped",
[
111
]
],
[
[
7485,
7485
],
"mapped",
[
547
]
],
[
[
7486,
7486
],
"mapped",
[
112
]
],
[
[
7487,
7487
],
"mapped",
[
114
]
],
[
[
7488,
7488
],
"mapped",
[
116
]
],
[
[
7489,
7489
],
"mapped",
[
117
]
],
[
[
7490,
7490
],
"mapped",
[
119
]
],
[
[
7491,
7491
],
"mapped",
[
97
]
],
[
[
7492,
7492
],
"mapped",
[
592
]
],
[
[
7493,
7493
],
"mapped",
[
593
]
],
[
[
7494,
7494
],
"mapped",
[
7426
]
],
[
[
7495,
7495
],
"mapped",
[
98
]
],
[
[
7496,
7496
],
"mapped",
[
100
]
],
[
[
7497,
7497
],
"mapped",
[
101
]
],
[
[
7498,
7498
],
"mapped",
[
601
]
],
[
[
7499,
7499
],
"mapped",
[
603
]
],
[
[
7500,
7500
],
"mapped",
[
604
]
],
[
[
7501,
7501
],
"mapped",
[
103
]
],
[
[
7502,
7502
],
"valid"
],
[
[
7503,
7503
],
"mapped",
[
107
]
],
[
[
7504,
7504
],
"mapped",
[
109
]
],
[
[
7505,
7505
],
"mapped",
[
331
]
],
[
[
7506,
7506
],
"mapped",
[
111
]
],
[
[
7507,
7507
],
"mapped",
[
596
]
],
[
[
7508,
7508
],
"mapped",
[
7446
]
],
[
[
7509,
7509
],
"mapped",
[
7447
]
],
[
[
7510,
7510
],
"mapped",
[
112
]
],
[
[
7511,
7511
],
"mapped",
[
116
]
],
[
[
7512,
7512
],
"mapped",
[
117
]
],
[
[
7513,
7513
],
"mapped",
[
7453
]
],
[
[
7514,
7514
],
"mapped",
[
623
]
],
[
[
7515,
7515
],
"mapped",
[
118
]
],
[
[
7516,
7516
],
"mapped",
[
7461
]
],
[
[
7517,
7517
],
"mapped",
[
946
]
],
[
[
7518,
7518
],
"mapped",
[
947
]
],
[
[
7519,
7519
],
"mapped",
[
948
]
],
[
[
7520,
7520
],
"mapped",
[
966
]
],
[
[
7521,
7521
],
"mapped",
[
967
]
],
[
[
7522,
7522
],
"mapped",
[
105
]
],
[
[
7523,
7523
],
"mapped",
[
114
]
],
[
[
7524,
7524
],
"mapped",
[
117
]
],
[
[
7525,
7525
],
"mapped",
[
118
]
],
[
[
7526,
7526
],
"mapped",
[
946
]
],
[
[
7527,
7527
],
"mapped",
[
947
]
],
[
[
7528,
7528
],
"mapped",
[
961
]
],
[
[
7529,
7529
],
"mapped",
[
966
]
],
[
[
7530,
7530
],
"mapped",
[
967
]
],
[
[
7531,
7531
],
"valid"
],
[
[
7532,
7543
],
"valid"
],
[
[
7544,
7544
],
"mapped",
[
1085
]
],
[
[
7545,
7578
],
"valid"
],
[
[
7579,
7579
],
"mapped",
[
594
]
],
[
[
7580,
7580
],
"mapped",
[
99
]
],
[
[
7581,
7581
],
"mapped",
[
597
]
],
[
[
7582,
7582
],
"mapped",
[
240
]
],
[
[
7583,
7583
],
"mapped",
[
604
]
],
[
[
7584,
7584
],
"mapped",
[
102
]
],
[
[
7585,
7585
],
"mapped",
[
607
]
],
[
[
7586,
7586
],
"mapped",
[
609
]
],
[
[
7587,
7587
],
"mapped",
[
613
]
],
[
[
7588,
7588
],
"mapped",
[
616
]
],
[
[
7589,
7589
],
"mapped",
[
617
]
],
[
[
7590,
7590
],
"mapped",
[
618
]
],
[
[
7591,
7591
],
"mapped",
[
7547
]
],
[
[
7592,
7592
],
"mapped",
[
669
]
],
[
[
7593,
7593
],
"mapped",
[
621
]
],
[
[
7594,
7594
],
"mapped",
[
7557
]
],
[
[
7595,
7595
],
"mapped",
[
671
]
],
[
[
7596,
7596
],
"mapped",
[
625
]
],
[
[
7597,
7597
],
"mapped",
[
624
]
],
[
[
7598,
7598
],
"mapped",
[
626
]
],
[
[
7599,
7599
],
"mapped",
[
627
]
],
[
[
7600,
7600
],
"mapped",
[
628
]
],
[
[
7601,
7601
],
"mapped",
[
629
]
],
[
[
7602,
7602
],
"mapped",
[
632
]
],
[
[
7603,
7603
],
"mapped",
[
642
]
],
[
[
7604,
7604
],
"mapped",
[
643
]
],
[
[
7605,
7605
],
"mapped",
[
427
]
],
[
[
7606,
7606
],
"mapped",
[
649
]
],
[
[
7607,
7607
],
"mapped",
[
650
]
],
[
[
7608,
7608
],
"mapped",
[
7452
]
],
[
[
7609,
7609
],
"mapped",
[
651
]
],
[
[
7610,
7610
],
"mapped",
[
652
]
],
[
[
7611,
7611
],
"mapped",
[
122
]
],
[
[
7612,
7612
],
"mapped",
[
656
]
],
[
[
7613,
7613
],
"mapped",
[
657
]
],
[
[
7614,
7614
],
"mapped",
[
658
]
],
[
[
7615,
7615
],
"mapped",
[
952
]
],
[
[
7616,
7619
],
"valid"
],
[
[
7620,
7626
],
"valid"
],
[
[
7627,
7654
],
"valid"
],
[
[
7655,
7669
],
"valid"
],
[
[
7670,
7675
],
"disallowed"
],
[
[
7676,
7676
],
"valid"
],
[
[
7677,
7677
],
"valid"
],
[
[
7678,
7679
],
"valid"
],
[
[
7680,
7680
],
"mapped",
[
7681
]
],
[
[
7681,
7681
],
"valid"
],
[
[
7682,
7682
],
"mapped",
[
7683
]
],
[
[
7683,
7683
],
"valid"
],
[
[
7684,
7684
],
"mapped",
[
7685
]
],
[
[
7685,
7685
],
"valid"
],
[
[
7686,
7686
],
"mapped",
[
7687
]
],
[
[
7687,
7687
],
"valid"
],
[
[
7688,
7688
],
"mapped",
[
7689
]
],
[
[
7689,
7689
],
"valid"
],
[
[
7690,
7690
],
"mapped",
[
7691
]
],
[
[
7691,
7691
],
"valid"
],
[
[
7692,
7692
],
"mapped",
[
7693
]
],
[
[
7693,
7693
],
"valid"
],
[
[
7694,
7694
],
"mapped",
[
7695
]
],
[
[
7695,
7695
],
"valid"
],
[
[
7696,
7696
],
"mapped",
[
7697
]
],
[
[
7697,
7697
],
"valid"
],
[
[
7698,
7698
],
"mapped",
[
7699
]
],
[
[
7699,
7699
],
"valid"
],
[
[
7700,
7700
],
"mapped",
[
7701
]
],
[
[
7701,
7701
],
"valid"
],
[
[
7702,
7702
],
"mapped",
[
7703
]
],
[
[
7703,
7703
],
"valid"
],
[
[
7704,
7704
],
"mapped",
[
7705
]
],
[
[
7705,
7705
],
"valid"
],
[
[
7706,
7706
],
"mapped",
[
7707
]
],
[
[
7707,
7707
],
"valid"
],
[
[
7708,
7708
],
"mapped",
[
7709
]
],
[
[
7709,
7709
],
"valid"
],
[
[
7710,
7710
],
"mapped",
[
7711
]
],
[
[
7711,
7711
],
"valid"
],
[
[
7712,
7712
],
"mapped",
[
7713
]
],
[
[
7713,
7713
],
"valid"
],
[
[
7714,
7714
],
"mapped",
[
7715
]
],
[
[
7715,
7715
],
"valid"
],
[
[
7716,
7716
],
"mapped",
[
7717
]
],
[
[
7717,
7717
],
"valid"
],
[
[
7718,
7718
],
"mapped",
[
7719
]
],
[
[
7719,
7719
],
"valid"
],
[
[
7720,
7720
],
"mapped",
[
7721
]
],
[
[
7721,
7721
],
"valid"
],
[
[
7722,
7722
],
"mapped",
[
7723
]
],
[
[
7723,
7723
],
"valid"
],
[
[
7724,
7724
],
"mapped",
[
7725
]
],
[
[
7725,
7725
],
"valid"
],
[
[
7726,
7726
],
"mapped",
[
7727
]
],
[
[
7727,
7727
],
"valid"
],
[
[
7728,
7728
],
"mapped",
[
7729
]
],
[
[
7729,
7729
],
"valid"
],
[
[
7730,
7730
],
"mapped",
[
7731
]
],
[
[
7731,
7731
],
"valid"
],
[
[
7732,
7732
],
"mapped",
[
7733
]
],
[
[
7733,
7733
],
"valid"
],
[
[
7734,
7734
],
"mapped",
[
7735
]
],
[
[
7735,
7735
],
"valid"
],
[
[
7736,
7736
],
"mapped",
[
7737
]
],
[
[
7737,
7737
],
"valid"
],
[
[
7738,
7738
],
"mapped",
[
7739
]
],
[
[
7739,
7739
],
"valid"
],
[
[
7740,
7740
],
"mapped",
[
7741
]
],
[
[
7741,
7741
],
"valid"
],
[
[
7742,
7742
],
"mapped",
[
7743
]
],
[
[
7743,
7743
],
"valid"
],
[
[
7744,
7744
],
"mapped",
[
7745
]
],
[
[
7745,
7745
],
"valid"
],
[
[
7746,
7746
],
"mapped",
[
7747
]
],
[
[
7747,
7747
],
"valid"
],
[
[
7748,
7748
],
"mapped",
[
7749
]
],
[
[
7749,
7749
],
"valid"
],
[
[
7750,
7750
],
"mapped",
[
7751
]
],
[
[
7751,
7751
],
"valid"
],
[
[
7752,
7752
],
"mapped",
[
7753
]
],
[
[
7753,
7753
],
"valid"
],
[
[
7754,
7754
],
"mapped",
[
7755
]
],
[
[
7755,
7755
],
"valid"
],
[
[
7756,
7756
],
"mapped",
[
7757
]
],
[
[
7757,
7757
],
"valid"
],
[
[
7758,
7758
],
"mapped",
[
7759
]
],
[
[
7759,
7759
],
"valid"
],
[
[
7760,
7760
],
"mapped",
[
7761
]
],
[
[
7761,
7761
],
"valid"
],
[
[
7762,
7762
],
"mapped",
[
7763
]
],
[
[
7763,
7763
],
"valid"
],
[
[
7764,
7764
],
"mapped",
[
7765
]
],
[
[
7765,
7765
],
"valid"
],
[
[
7766,
7766
],
"mapped",
[
7767
]
],
[
[
7767,
7767
],
"valid"
],
[
[
7768,
7768
],
"mapped",
[
7769
]
],
[
[
7769,
7769
],
"valid"
],
[
[
7770,
7770
],
"mapped",
[
7771
]
],
[
[
7771,
7771
],
"valid"
],
[
[
7772,
7772
],
"mapped",
[
7773
]
],
[
[
7773,
7773
],
"valid"
],
[
[
7774,
7774
],
"mapped",
[
7775
]
],
[
[
7775,
7775
],
"valid"
],
[
[
7776,
7776
],
"mapped",
[
7777
]
],
[
[
7777,
7777
],
"valid"
],
[
[
7778,
7778
],
"mapped",
[
7779
]
],
[
[
7779,
7779
],
"valid"
],
[
[
7780,
7780
],
"mapped",
[
7781
]
],
[
[
7781,
7781
],
"valid"
],
[
[
7782,
7782
],
"mapped",
[
7783
]
],
[
[
7783,
7783
],
"valid"
],
[
[
7784,
7784
],
"mapped",
[
7785
]
],
[
[
7785,
7785
],
"valid"
],
[
[
7786,
7786
],
"mapped",
[
7787
]
],
[
[
7787,
7787
],
"valid"
],
[
[
7788,
7788
],
"mapped",
[
7789
]
],
[
[
7789,
7789
],
"valid"
],
[
[
7790,
7790
],
"mapped",
[
7791
]
],
[
[
7791,
7791
],
"valid"
],
[
[
7792,
7792
],
"mapped",
[
7793
]
],
[
[
7793,
7793
],
"valid"
],
[
[
7794,
7794
],
"mapped",
[
7795
]
],
[
[
7795,
7795
],
"valid"
],
[
[
7796,
7796
],
"mapped",
[
7797
]
],
[
[
7797,
7797
],
"valid"
],
[
[
7798,
7798
],
"mapped",
[
7799
]
],
[
[
7799,
7799
],
"valid"
],
[
[
7800,
7800
],
"mapped",
[
7801
]
],
[
[
7801,
7801
],
"valid"
],
[
[
7802,
7802
],
"mapped",
[
7803
]
],
[
[
7803,
7803
],
"valid"
],
[
[
7804,
7804
],
"mapped",
[
7805
]
],
[
[
7805,
7805
],
"valid"
],
[
[
7806,
7806
],
"mapped",
[
7807
]
],
[
[
7807,
7807
],
"valid"
],
[
[
7808,
7808
],
"mapped",
[
7809
]
],
[
[
7809,
7809
],
"valid"
],
[
[
7810,
7810
],
"mapped",
[
7811
]
],
[
[
7811,
7811
],
"valid"
],
[
[
7812,
7812
],
"mapped",
[
7813
]
],
[
[
7813,
7813
],
"valid"
],
[
[
7814,
7814
],
"mapped",
[
7815
]
],
[
[
7815,
7815
],
"valid"
],
[
[
7816,
7816
],
"mapped",
[
7817
]
],
[
[
7817,
7817
],
"valid"
],
[
[
7818,
7818
],
"mapped",
[
7819
]
],
[
[
7819,
7819
],
"valid"
],
[
[
7820,
7820
],
"mapped",
[
7821
]
],
[
[
7821,
7821
],
"valid"
],
[
[
7822,
7822
],
"mapped",
[
7823
]
],
[
[
7823,
7823
],
"valid"
],
[
[
7824,
7824
],
"mapped",
[
7825
]
],
[
[
7825,
7825
],
"valid"
],
[
[
7826,
7826
],
"mapped",
[
7827
]
],
[
[
7827,
7827
],
"valid"
],
[
[
7828,
7828
],
"mapped",
[
7829
]
],
[
[
7829,
7833
],
"valid"
],
[
[
7834,
7834
],
"mapped",
[
97,
702
]
],
[
[
7835,
7835
],
"mapped",
[
7777
]
],
[
[
7836,
7837
],
"valid"
],
[
[
7838,
7838
],
"mapped",
[
115,
115
]
],
[
[
7839,
7839
],
"valid"
],
[
[
7840,
7840
],
"mapped",
[
7841
]
],
[
[
7841,
7841
],
"valid"
],
[
[
7842,
7842
],
"mapped",
[
7843
]
],
[
[
7843,
7843
],
"valid"
],
[
[
7844,
7844
],
"mapped",
[
7845
]
],
[
[
7845,
7845
],
"valid"
],
[
[
7846,
7846
],
"mapped",
[
7847
]
],
[
[
7847,
7847
],
"valid"
],
[
[
7848,
7848
],
"mapped",
[
7849
]
],
[
[
7849,
7849
],
"valid"
],
[
[
7850,
7850
],
"mapped",
[
7851
]
],
[
[
7851,
7851
],
"valid"
],
[
[
7852,
7852
],
"mapped",
[
7853
]
],
[
[
7853,
7853
],
"valid"
],
[
[
7854,
7854
],
"mapped",
[
7855
]
],
[
[
7855,
7855
],
"valid"
],
[
[
7856,
7856
],
"mapped",
[
7857
]
],
[
[
7857,
7857
],
"valid"
],
[
[
7858,
7858
],
"mapped",
[
7859
]
],
[
[
7859,
7859
],
"valid"
],
[
[
7860,
7860
],
"mapped",
[
7861
]
],
[
[
7861,
7861
],
"valid"
],
[
[
7862,
7862
],
"mapped",
[
7863
]
],
[
[
7863,
7863
],
"valid"
],
[
[
7864,
7864
],
"mapped",
[
7865
]
],
[
[
7865,
7865
],
"valid"
],
[
[
7866,
7866
],
"mapped",
[
7867
]
],
[
[
7867,
7867
],
"valid"
],
[
[
7868,
7868
],
"mapped",
[
7869
]
],
[
[
7869,
7869
],
"valid"
],
[
[
7870,
7870
],
"mapped",
[
7871
]
],
[
[
7871,
7871
],
"valid"
],
[
[
7872,
7872
],
"mapped",
[
7873
]
],
[
[
7873,
7873
],
"valid"
],
[
[
7874,
7874
],
"mapped",
[
7875
]
],
[
[
7875,
7875
],
"valid"
],
[
[
7876,
7876
],
"mapped",
[
7877
]
],
[
[
7877,
7877
],
"valid"
],
[
[
7878,
7878
],
"mapped",
[
7879
]
],
[
[
7879,
7879
],
"valid"
],
[
[
7880,
7880
],
"mapped",
[
7881
]
],
[
[
7881,
7881
],
"valid"
],
[
[
7882,
7882
],
"mapped",
[
7883
]
],
[
[
7883,
7883
],
"valid"
],
[
[
7884,
7884
],
"mapped",
[
7885
]
],
[
[
7885,
7885
],
"valid"
],
[
[
7886,
7886
],
"mapped",
[
7887
]
],
[
[
7887,
7887
],
"valid"
],
[
[
7888,
7888
],
"mapped",
[
7889
]
],
[
[
7889,
7889
],
"valid"
],
[
[
7890,
7890
],
"mapped",
[
7891
]
],
[
[
7891,
7891
],
"valid"
],
[
[
7892,
7892
],
"mapped",
[
7893
]
],
[
[
7893,
7893
],
"valid"
],
[
[
7894,
7894
],
"mapped",
[
7895
]
],
[
[
7895,
7895
],
"valid"
],
[
[
7896,
7896
],
"mapped",
[
7897
]
],
[
[
7897,
7897
],
"valid"
],
[
[
7898,
7898
],
"mapped",
[
7899
]
],
[
[
7899,
7899
],
"valid"
],
[
[
7900,
7900
],
"mapped",
[
7901
]
],
[
[
7901,
7901
],
"valid"
],
[
[
7902,
7902
],
"mapped",
[
7903
]
],
[
[
7903,
7903
],
"valid"
],
[
[
7904,
7904
],
"mapped",
[
7905
]
],
[
[
7905,
7905
],
"valid"
],
[
[
7906,
7906
],
"mapped",
[
7907
]
],
[
[
7907,
7907
],
"valid"
],
[
[
7908,
7908
],
"mapped",
[
7909
]
],
[
[
7909,
7909
],
"valid"
],
[
[
7910,
7910
],
"mapped",
[
7911
]
],
[
[
7911,
7911
],
"valid"
],
[
[
7912,
7912
],
"mapped",
[
7913
]
],
[
[
7913,
7913
],
"valid"
],
[
[
7914,
7914
],
"mapped",
[
7915
]
],
[
[
7915,
7915
],
"valid"
],
[
[
7916,
7916
],
"mapped",
[
7917
]
],
[
[
7917,
7917
],
"valid"
],
[
[
7918,
7918
],
"mapped",
[
7919
]
],
[
[
7919,
7919
],
"valid"
],
[
[
7920,
7920
],
"mapped",
[
7921
]
],
[
[
7921,
7921
],
"valid"
],
[
[
7922,
7922
],
"mapped",
[
7923
]
],
[
[
7923,
7923
],
"valid"
],
[
[
7924,
7924
],
"mapped",
[
7925
]
],
[
[
7925,
7925
],
"valid"
],
[
[
7926,
7926
],
"mapped",
[
7927
]
],
[
[
7927,
7927
],
"valid"
],
[
[
7928,
7928
],
"mapped",
[
7929
]
],
[
[
7929,
7929
],
"valid"
],
[
[
7930,
7930
],
"mapped",
[
7931
]
],
[
[
7931,
7931
],
"valid"
],
[
[
7932,
7932
],
"mapped",
[
7933
]
],
[
[
7933,
7933
],
"valid"
],
[
[
7934,
7934
],
"mapped",
[
7935
]
],
[
[
7935,
7935
],
"valid"
],
[
[
7936,
7943
],
"valid"
],
[
[
7944,
7944
],
"mapped",
[
7936
]
],
[
[
7945,
7945
],
"mapped",
[
7937
]
],
[
[
7946,
7946
],
"mapped",
[
7938
]
],
[
[
7947,
7947
],
"mapped",
[
7939
]
],
[
[
7948,
7948
],
"mapped",
[
7940
]
],
[
[
7949,
7949
],
"mapped",
[
7941
]
],
[
[
7950,
7950
],
"mapped",
[
7942
]
],
[
[
7951,
7951
],
"mapped",
[
7943
]
],
[
[
7952,
7957
],
"valid"
],
[
[
7958,
7959
],
"disallowed"
],
[
[
7960,
7960
],
"mapped",
[
7952
]
],
[
[
7961,
7961
],
"mapped",
[
7953
]
],
[
[
7962,
7962
],
"mapped",
[
7954
]
],
[
[
7963,
7963
],
"mapped",
[
7955
]
],
[
[
7964,
7964
],
"mapped",
[
7956
]
],
[
[
7965,
7965
],
"mapped",
[
7957
]
],
[
[
7966,
7967
],
"disallowed"
],
[
[
7968,
7975
],
"valid"
],
[
[
7976,
7976
],
"mapped",
[
7968
]
],
[
[
7977,
7977
],
"mapped",
[
7969
]
],
[
[
7978,
7978
],
"mapped",
[
7970
]
],
[
[
7979,
7979
],
"mapped",
[
7971
]
],
[
[
7980,
7980
],
"mapped",
[
7972
]
],
[
[
7981,
7981
],
"mapped",
[
7973
]
],
[
[
7982,
7982
],
"mapped",
[
7974
]
],
[
[
7983,
7983
],
"mapped",
[
7975
]
],
[
[
7984,
7991
],
"valid"
],
[
[
7992,
7992
],
"mapped",
[
7984
]
],
[
[
7993,
7993
],
"mapped",
[
7985
]
],
[
[
7994,
7994
],
"mapped",
[
7986
]
],
[
[
7995,
7995
],
"mapped",
[
7987
]
],
[
[
7996,
7996
],
"mapped",
[
7988
]
],
[
[
7997,
7997
],
"mapped",
[
7989
]
],
[
[
7998,
7998
],
"mapped",
[
7990
]
],
[
[
7999,
7999
],
"mapped",
[
7991
]
],
[
[
8000,
8005
],
"valid"
],
[
[
8006,
8007
],
"disallowed"
],
[
[
8008,
8008
],
"mapped",
[
8000
]
],
[
[
8009,
8009
],
"mapped",
[
8001
]
],
[
[
8010,
8010
],
"mapped",
[
8002
]
],
[
[
8011,
8011
],
"mapped",
[
8003
]
],
[
[
8012,
8012
],
"mapped",
[
8004
]
],
[
[
8013,
8013
],
"mapped",
[
8005
]
],
[
[
8014,
8015
],
"disallowed"
],
[
[
8016,
8023
],
"valid"
],
[
[
8024,
8024
],
"disallowed"
],
[
[
8025,
8025
],
"mapped",
[
8017
]
],
[
[
8026,
8026
],
"disallowed"
],
[
[
8027,
8027
],
"mapped",
[
8019
]
],
[
[
8028,
8028
],
"disallowed"
],
[
[
8029,
8029
],
"mapped",
[
8021
]
],
[
[
8030,
8030
],
"disallowed"
],
[
[
8031,
8031
],
"mapped",
[
8023
]
],
[
[
8032,
8039
],
"valid"
],
[
[
8040,
8040
],
"mapped",
[
8032
]
],
[
[
8041,
8041
],
"mapped",
[
8033
]
],
[
[
8042,
8042
],
"mapped",
[
8034
]
],
[
[
8043,
8043
],
"mapped",
[
8035
]
],
[
[
8044,
8044
],
"mapped",
[
8036
]
],
[
[
8045,
8045
],
"mapped",
[
8037
]
],
[
[
8046,
8046
],
"mapped",
[
8038
]
],
[
[
8047,
8047
],
"mapped",
[
8039
]
],
[
[
8048,
8048
],
"valid"
],
[
[
8049,
8049
],
"mapped",
[
940
]
],
[
[
8050,
8050
],
"valid"
],
[
[
8051,
8051
],
"mapped",
[
941
]
],
[
[
8052,
8052
],
"valid"
],
[
[
8053,
8053
],
"mapped",
[
942
]
],
[
[
8054,
8054
],
"valid"
],
[
[
8055,
8055
],
"mapped",
[
943
]
],
[
[
8056,
8056
],
"valid"
],
[
[
8057,
8057
],
"mapped",
[
972
]
],
[
[
8058,
8058
],
"valid"
],
[
[
8059,
8059
],
"mapped",
[
973
]
],
[
[
8060,
8060
],
"valid"
],
[
[
8061,
8061
],
"mapped",
[
974
]
],
[
[
8062,
8063
],
"disallowed"
],
[
[
8064,
8064
],
"mapped",
[
7936,
953
]
],
[
[
8065,
8065
],
"mapped",
[
7937,
953
]
],
[
[
8066,
8066
],
"mapped",
[
7938,
953
]
],
[
[
8067,
8067
],
"mapped",
[
7939,
953
]
],
[
[
8068,
8068
],
"mapped",
[
7940,
953
]
],
[
[
8069,
8069
],
"mapped",
[
7941,
953
]
],
[
[
8070,
8070
],
"mapped",
[
7942,
953
]
],
[
[
8071,
8071
],
"mapped",
[
7943,
953
]
],
[
[
8072,
8072
],
"mapped",
[
7936,
953
]
],
[
[
8073,
8073
],
"mapped",
[
7937,
953
]
],
[
[
8074,
8074
],
"mapped",
[
7938,
953
]
],
[
[
8075,
8075
],
"mapped",
[
7939,
953
]
],
[
[
8076,
8076
],
"mapped",
[
7940,
953
]
],
[
[
8077,
8077
],
"mapped",
[
7941,
953
]
],
[
[
8078,
8078
],
"mapped",
[
7942,
953
]
],
[
[
8079,
8079
],
"mapped",
[
7943,
953
]
],
[
[
8080,
8080
],
"mapped",
[
7968,
953
]
],
[
[
8081,
8081
],
"mapped",
[
7969,
953
]
],
[
[
8082,
8082
],
"mapped",
[
7970,
953
]
],
[
[
8083,
8083
],
"mapped",
[
7971,
953
]
],
[
[
8084,
8084
],
"mapped",
[
7972,
953
]
],
[
[
8085,
8085
],
"mapped",
[
7973,
953
]
],
[
[
8086,
8086
],
"mapped",
[
7974,
953
]
],
[
[
8087,
8087
],
"mapped",
[
7975,
953
]
],
[
[
8088,
8088
],
"mapped",
[
7968,
953
]
],
[
[
8089,
8089
],
"mapped",
[
7969,
953
]
],
[
[
8090,
8090
],
"mapped",
[
7970,
953
]
],
[
[
8091,
8091
],
"mapped",
[
7971,
953
]
],
[
[
8092,
8092
],
"mapped",
[
7972,
953
]
],
[
[
8093,
8093
],
"mapped",
[
7973,
953
]
],
[
[
8094,
8094
],
"mapped",
[
7974,
953
]
],
[
[
8095,
8095
],
"mapped",
[
7975,
953
]
],
[
[
8096,
8096
],
"mapped",
[
8032,
953
]
],
[
[
8097,
8097
],
"mapped",
[
8033,
953
]
],
[
[
8098,
8098
],
"mapped",
[
8034,
953
]
],
[
[
8099,
8099
],
"mapped",
[
8035,
953
]
],
[
[
8100,
8100
],
"mapped",
[
8036,
953
]
],
[
[
8101,
8101
],
"mapped",
[
8037,
953
]
],
[
[
8102,
8102
],
"mapped",
[
8038,
953
]
],
[
[
8103,
8103
],
"mapped",
[
8039,
953
]
],
[
[
8104,
8104
],
"mapped",
[
8032,
953
]
],
[
[
8105,
8105
],
"mapped",
[
8033,
953
]
],
[
[
8106,
8106
],
"mapped",
[
8034,
953
]
],
[
[
8107,
8107
],
"mapped",
[
8035,
953
]
],
[
[
8108,
8108
],
"mapped",
[
8036,
953
]
],
[
[
8109,
8109
],
"mapped",
[
8037,
953
]
],
[
[
8110,
8110
],
"mapped",
[
8038,
953
]
],
[
[
8111,
8111
],
"mapped",
[
8039,
953
]
],
[
[
8112,
8113
],
"valid"
],
[
[
8114,
8114
],
"mapped",
[
8048,
953
]
],
[
[
8115,
8115
],
"mapped",
[
945,
953
]
],
[
[
8116,
8116
],
"mapped",
[
940,
953
]
],
[
[
8117,
8117
],
"disallowed"
],
[
[
8118,
8118
],
"valid"
],
[
[
8119,
8119
],
"mapped",
[
8118,
953
]
],
[
[
8120,
8120
],
"mapped",
[
8112
]
],
[
[
8121,
8121
],
"mapped",
[
8113
]
],
[
[
8122,
8122
],
"mapped",
[
8048
]
],
[
[
8123,
8123
],
"mapped",
[
940
]
],
[
[
8124,
8124
],
"mapped",
[
945,
953
]
],
[
[
8125,
8125
],
"disallowed_STD3_mapped",
[
32,
787
]
],
[
[
8126,
8126
],
"mapped",
[
953
]
],
[
[
8127,
8127
],
"disallowed_STD3_mapped",
[
32,
787
]
],
[
[
8128,
8128
],
"disallowed_STD3_mapped",
[
32,
834
]
],
[
[
8129,
8129
],
"disallowed_STD3_mapped",
[
32,
776,
834
]
],
[
[
8130,
8130
],
"mapped",
[
8052,
953
]
],
[
[
8131,
8131
],
"mapped",
[
951,
953
]
],
[
[
8132,
8132
],
"mapped",
[
942,
953
]
],
[
[
8133,
8133
],
"disallowed"
],
[
[
8134,
8134
],
"valid"
],
[
[
8135,
8135
],
"mapped",
[
8134,
953
]
],
[
[
8136,
8136
],
"mapped",
[
8050
]
],
[
[
8137,
8137
],
"mapped",
[
941
]
],
[
[
8138,
8138
],
"mapped",
[
8052
]
],
[
[
8139,
8139
],
"mapped",
[
942
]
],
[
[
8140,
8140
],
"mapped",
[
951,
953
]
],
[
[
8141,
8141
],
"disallowed_STD3_mapped",
[
32,
787,
768
]
],
[
[
8142,
8142
],
"disallowed_STD3_mapped",
[
32,
787,
769
]
],
[
[
8143,
8143
],
"disallowed_STD3_mapped",
[
32,
787,
834
]
],
[
[
8144,
8146
],
"valid"
],
[
[
8147,
8147
],
"mapped",
[
912
]
],
[
[
8148,
8149
],
"disallowed"
],
[
[
8150,
8151
],
"valid"
],
[
[
8152,
8152
],
"mapped",
[
8144
]
],
[
[
8153,
8153
],
"mapped",
[
8145
]
],
[
[
8154,
8154
],
"mapped",
[
8054
]
],
[
[
8155,
8155
],
"mapped",
[
943
]
],
[
[
8156,
8156
],
"disallowed"
],
[
[
8157,
8157
],
"disallowed_STD3_mapped",
[
32,
788,
768
]
],
[
[
8158,
8158
],
"disallowed_STD3_mapped",
[
32,
788,
769
]
],
[
[
8159,
8159
],
"disallowed_STD3_mapped",
[
32,
788,
834
]
],
[
[
8160,
8162
],
"valid"
],
[
[
8163,
8163
],
"mapped",
[
944
]
],
[
[
8164,
8167
],
"valid"
],
[
[
8168,
8168
],
"mapped",
[
8160
]
],
[
[
8169,
8169
],
"mapped",
[
8161
]
],
[
[
8170,
8170
],
"mapped",
[
8058
]
],
[
[
8171,
8171
],
"mapped",
[
973
]
],
[
[
8172,
8172
],
"mapped",
[
8165
]
],
[
[
8173,
8173
],
"disallowed_STD3_mapped",
[
32,
776,
768
]
],
[
[
8174,
8174
],
"disallowed_STD3_mapped",
[
32,
776,
769
]
],
[
[
8175,
8175
],
"disallowed_STD3_mapped",
[
96
]
],
[
[
8176,
8177
],
"disallowed"
],
[
[
8178,
8178
],
"mapped",
[
8060,
953
]
],
[
[
8179,
8179
],
"mapped",
[
969,
953
]
],
[
[
8180,
8180
],
"mapped",
[
974,
953
]
],
[
[
8181,
8181
],
"disallowed"
],
[
[
8182,
8182
],
"valid"
],
[
[
8183,
8183
],
"mapped",
[
8182,
953
]
],
[
[
8184,
8184
],
"mapped",
[
8056
]
],
[
[
8185,
8185
],
"mapped",
[
972
]
],
[
[
8186,
8186
],
"mapped",
[
8060
]
],
[
[
8187,
8187
],
"mapped",
[
974
]
],
[
[
8188,
8188
],
"mapped",
[
969,
953
]
],
[
[
8189,
8189
],
"disallowed_STD3_mapped",
[
32,
769
]
],
[
[
8190,
8190
],
"disallowed_STD3_mapped",
[
32,
788
]
],
[
[
8191,
8191
],
"disallowed"
],
[
[
8192,
8202
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
8203,
8203
],
"ignored"
],
[
[
8204,
8205
],
"deviation",
[
]
],
[
[
8206,
8207
],
"disallowed"
],
[
[
8208,
8208
],
"valid",
[
],
"NV8"
],
[
[
8209,
8209
],
"mapped",
[
8208
]
],
[
[
8210,
8214
],
"valid",
[
],
"NV8"
],
[
[
8215,
8215
],
"disallowed_STD3_mapped",
[
32,
819
]
],
[
[
8216,
8227
],
"valid",
[
],
"NV8"
],
[
[
8228,
8230
],
"disallowed"
],
[
[
8231,
8231
],
"valid",
[
],
"NV8"
],
[
[
8232,
8238
],
"disallowed"
],
[
[
8239,
8239
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
8240,
8242
],
"valid",
[
],
"NV8"
],
[
[
8243,
8243
],
"mapped",
[
8242,
8242
]
],
[
[
8244,
8244
],
"mapped",
[
8242,
8242,
8242
]
],
[
[
8245,
8245
],
"valid",
[
],
"NV8"
],
[
[
8246,
8246
],
"mapped",
[
8245,
8245
]
],
[
[
8247,
8247
],
"mapped",
[
8245,
8245,
8245
]
],
[
[
8248,
8251
],
"valid",
[
],
"NV8"
],
[
[
8252,
8252
],
"disallowed_STD3_mapped",
[
33,
33
]
],
[
[
8253,
8253
],
"valid",
[
],
"NV8"
],
[
[
8254,
8254
],
"disallowed_STD3_mapped",
[
32,
773
]
],
[
[
8255,
8262
],
"valid",
[
],
"NV8"
],
[
[
8263,
8263
],
"disallowed_STD3_mapped",
[
63,
63
]
],
[
[
8264,
8264
],
"disallowed_STD3_mapped",
[
63,
33
]
],
[
[
8265,
8265
],
"disallowed_STD3_mapped",
[
33,
63
]
],
[
[
8266,
8269
],
"valid",
[
],
"NV8"
],
[
[
8270,
8274
],
"valid",
[
],
"NV8"
],
[
[
8275,
8276
],
"valid",
[
],
"NV8"
],
[
[
8277,
8278
],
"valid",
[
],
"NV8"
],
[
[
8279,
8279
],
"mapped",
[
8242,
8242,
8242,
8242
]
],
[
[
8280,
8286
],
"valid",
[
],
"NV8"
],
[
[
8287,
8287
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
8288,
8288
],
"ignored"
],
[
[
8289,
8291
],
"disallowed"
],
[
[
8292,
8292
],
"ignored"
],
[
[
8293,
8293
],
"disallowed"
],
[
[
8294,
8297
],
"disallowed"
],
[
[
8298,
8303
],
"disallowed"
],
[
[
8304,
8304
],
"mapped",
[
48
]
],
[
[
8305,
8305
],
"mapped",
[
105
]
],
[
[
8306,
8307
],
"disallowed"
],
[
[
8308,
8308
],
"mapped",
[
52
]
],
[
[
8309,
8309
],
"mapped",
[
53
]
],
[
[
8310,
8310
],
"mapped",
[
54
]
],
[
[
8311,
8311
],
"mapped",
[
55
]
],
[
[
8312,
8312
],
"mapped",
[
56
]
],
[
[
8313,
8313
],
"mapped",
[
57
]
],
[
[
8314,
8314
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
8315,
8315
],
"mapped",
[
8722
]
],
[
[
8316,
8316
],
"disallowed_STD3_mapped",
[
61
]
],
[
[
8317,
8317
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
8318,
8318
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
8319,
8319
],
"mapped",
[
110
]
],
[
[
8320,
8320
],
"mapped",
[
48
]
],
[
[
8321,
8321
],
"mapped",
[
49
]
],
[
[
8322,
8322
],
"mapped",
[
50
]
],
[
[
8323,
8323
],
"mapped",
[
51
]
],
[
[
8324,
8324
],
"mapped",
[
52
]
],
[
[
8325,
8325
],
"mapped",
[
53
]
],
[
[
8326,
8326
],
"mapped",
[
54
]
],
[
[
8327,
8327
],
"mapped",
[
55
]
],
[
[
8328,
8328
],
"mapped",
[
56
]
],
[
[
8329,
8329
],
"mapped",
[
57
]
],
[
[
8330,
8330
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
8331,
8331
],
"mapped",
[
8722
]
],
[
[
8332,
8332
],
"disallowed_STD3_mapped",
[
61
]
],
[
[
8333,
8333
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
8334,
8334
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
8335,
8335
],
"disallowed"
],
[
[
8336,
8336
],
"mapped",
[
97
]
],
[
[
8337,
8337
],
"mapped",
[
101
]
],
[
[
8338,
8338
],
"mapped",
[
111
]
],
[
[
8339,
8339
],
"mapped",
[
120
]
],
[
[
8340,
8340
],
"mapped",
[
601
]
],
[
[
8341,
8341
],
"mapped",
[
104
]
],
[
[
8342,
8342
],
"mapped",
[
107
]
],
[
[
8343,
8343
],
"mapped",
[
108
]
],
[
[
8344,
8344
],
"mapped",
[
109
]
],
[
[
8345,
8345
],
"mapped",
[
110
]
],
[
[
8346,
8346
],
"mapped",
[
112
]
],
[
[
8347,
8347
],
"mapped",
[
115
]
],
[
[
8348,
8348
],
"mapped",
[
116
]
],
[
[
8349,
8351
],
"disallowed"
],
[
[
8352,
8359
],
"valid",
[
],
"NV8"
],
[
[
8360,
8360
],
"mapped",
[
114,
115
]
],
[
[
8361,
8362
],
"valid",
[
],
"NV8"
],
[
[
8363,
8363
],
"valid",
[
],
"NV8"
],
[
[
8364,
8364
],
"valid",
[
],
"NV8"
],
[
[
8365,
8367
],
"valid",
[
],
"NV8"
],
[
[
8368,
8369
],
"valid",
[
],
"NV8"
],
[
[
8370,
8373
],
"valid",
[
],
"NV8"
],
[
[
8374,
8376
],
"valid",
[
],
"NV8"
],
[
[
8377,
8377
],
"valid",
[
],
"NV8"
],
[
[
8378,
8378
],
"valid",
[
],
"NV8"
],
[
[
8379,
8381
],
"valid",
[
],
"NV8"
],
[
[
8382,
8382
],
"valid",
[
],
"NV8"
],
[
[
8383,
8399
],
"disallowed"
],
[
[
8400,
8417
],
"valid",
[
],
"NV8"
],
[
[
8418,
8419
],
"valid",
[
],
"NV8"
],
[
[
8420,
8426
],
"valid",
[
],
"NV8"
],
[
[
8427,
8427
],
"valid",
[
],
"NV8"
],
[
[
8428,
8431
],
"valid",
[
],
"NV8"
],
[
[
8432,
8432
],
"valid",
[
],
"NV8"
],
[
[
8433,
8447
],
"disallowed"
],
[
[
8448,
8448
],
"disallowed_STD3_mapped",
[
97,
47,
99
]
],
[
[
8449,
8449
],
"disallowed_STD3_mapped",
[
97,
47,
115
]
],
[
[
8450,
8450
],
"mapped",
[
99
]
],
[
[
8451,
8451
],
"mapped",
[
176,
99
]
],
[
[
8452,
8452
],
"valid",
[
],
"NV8"
],
[
[
8453,
8453
],
"disallowed_STD3_mapped",
[
99,
47,
111
]
],
[
[
8454,
8454
],
"disallowed_STD3_mapped",
[
99,
47,
117
]
],
[
[
8455,
8455
],
"mapped",
[
603
]
],
[
[
8456,
8456
],
"valid",
[
],
"NV8"
],
[
[
8457,
8457
],
"mapped",
[
176,
102
]
],
[
[
8458,
8458
],
"mapped",
[
103
]
],
[
[
8459,
8462
],
"mapped",
[
104
]
],
[
[
8463,
8463
],
"mapped",
[
295
]
],
[
[
8464,
8465
],
"mapped",
[
105
]
],
[
[
8466,
8467
],
"mapped",
[
108
]
],
[
[
8468,
8468
],
"valid",
[
],
"NV8"
],
[
[
8469,
8469
],
"mapped",
[
110
]
],
[
[
8470,
8470
],
"mapped",
[
110,
111
]
],
[
[
8471,
8472
],
"valid",
[
],
"NV8"
],
[
[
8473,
8473
],
"mapped",
[
112
]
],
[
[
8474,
8474
],
"mapped",
[
113
]
],
[
[
8475,
8477
],
"mapped",
[
114
]
],
[
[
8478,
8479
],
"valid",
[
],
"NV8"
],
[
[
8480,
8480
],
"mapped",
[
115,
109
]
],
[
[
8481,
8481
],
"mapped",
[
116,
101,
108
]
],
[
[
8482,
8482
],
"mapped",
[
116,
109
]
],
[
[
8483,
8483
],
"valid",
[
],
"NV8"
],
[
[
8484,
8484
],
"mapped",
[
122
]
],
[
[
8485,
8485
],
"valid",
[
],
"NV8"
],
[
[
8486,
8486
],
"mapped",
[
969
]
],
[
[
8487,
8487
],
"valid",
[
],
"NV8"
],
[
[
8488,
8488
],
"mapped",
[
122
]
],
[
[
8489,
8489
],
"valid",
[
],
"NV8"
],
[
[
8490,
8490
],
"mapped",
[
107
]
],
[
[
8491,
8491
],
"mapped",
[
229
]
],
[
[
8492,
8492
],
"mapped",
[
98
]
],
[
[
8493,
8493
],
"mapped",
[
99
]
],
[
[
8494,
8494
],
"valid",
[
],
"NV8"
],
[
[
8495,
8496
],
"mapped",
[
101
]
],
[
[
8497,
8497
],
"mapped",
[
102
]
],
[
[
8498,
8498
],
"disallowed"
],
[
[
8499,
8499
],
"mapped",
[
109
]
],
[
[
8500,
8500
],
"mapped",
[
111
]
],
[
[
8501,
8501
],
"mapped",
[
1488
]
],
[
[
8502,
8502
],
"mapped",
[
1489
]
],
[
[
8503,
8503
],
"mapped",
[
1490
]
],
[
[
8504,
8504
],
"mapped",
[
1491
]
],
[
[
8505,
8505
],
"mapped",
[
105
]
],
[
[
8506,
8506
],
"valid",
[
],
"NV8"
],
[
[
8507,
8507
],
"mapped",
[
102,
97,
120
]
],
[
[
8508,
8508
],
"mapped",
[
960
]
],
[
[
8509,
8510
],
"mapped",
[
947
]
],
[
[
8511,
8511
],
"mapped",
[
960
]
],
[
[
8512,
8512
],
"mapped",
[
8721
]
],
[
[
8513,
8516
],
"valid",
[
],
"NV8"
],
[
[
8517,
8518
],
"mapped",
[
100
]
],
[
[
8519,
8519
],
"mapped",
[
101
]
],
[
[
8520,
8520
],
"mapped",
[
105
]
],
[
[
8521,
8521
],
"mapped",
[
106
]
],
[
[
8522,
8523
],
"valid",
[
],
"NV8"
],
[
[
8524,
8524
],
"valid",
[
],
"NV8"
],
[
[
8525,
8525
],
"valid",
[
],
"NV8"
],
[
[
8526,
8526
],
"valid"
],
[
[
8527,
8527
],
"valid",
[
],
"NV8"
],
[
[
8528,
8528
],
"mapped",
[
49,
8260,
55
]
],
[
[
8529,
8529
],
"mapped",
[
49,
8260,
57
]
],
[
[
8530,
8530
],
"mapped",
[
49,
8260,
49,
48
]
],
[
[
8531,
8531
],
"mapped",
[
49,
8260,
51
]
],
[
[
8532,
8532
],
"mapped",
[
50,
8260,
51
]
],
[
[
8533,
8533
],
"mapped",
[
49,
8260,
53
]
],
[
[
8534,
8534
],
"mapped",
[
50,
8260,
53
]
],
[
[
8535,
8535
],
"mapped",
[
51,
8260,
53
]
],
[
[
8536,
8536
],
"mapped",
[
52,
8260,
53
]
],
[
[
8537,
8537
],
"mapped",
[
49,
8260,
54
]
],
[
[
8538,
8538
],
"mapped",
[
53,
8260,
54
]
],
[
[
8539,
8539
],
"mapped",
[
49,
8260,
56
]
],
[
[
8540,
8540
],
"mapped",
[
51,
8260,
56
]
],
[
[
8541,
8541
],
"mapped",
[
53,
8260,
56
]
],
[
[
8542,
8542
],
"mapped",
[
55,
8260,
56
]
],
[
[
8543,
8543
],
"mapped",
[
49,
8260
]
],
[
[
8544,
8544
],
"mapped",
[
105
]
],
[
[
8545,
8545
],
"mapped",
[
105,
105
]
],
[
[
8546,
8546
],
"mapped",
[
105,
105,
105
]
],
[
[
8547,
8547
],
"mapped",
[
105,
118
]
],
[
[
8548,
8548
],
"mapped",
[
118
]
],
[
[
8549,
8549
],
"mapped",
[
118,
105
]
],
[
[
8550,
8550
],
"mapped",
[
118,
105,
105
]
],
[
[
8551,
8551
],
"mapped",
[
118,
105,
105,
105
]
],
[
[
8552,
8552
],
"mapped",
[
105,
120
]
],
[
[
8553,
8553
],
"mapped",
[
120
]
],
[
[
8554,
8554
],
"mapped",
[
120,
105
]
],
[
[
8555,
8555
],
"mapped",
[
120,
105,
105
]
],
[
[
8556,
8556
],
"mapped",
[
108
]
],
[
[
8557,
8557
],
"mapped",
[
99
]
],
[
[
8558,
8558
],
"mapped",
[
100
]
],
[
[
8559,
8559
],
"mapped",
[
109
]
],
[
[
8560,
8560
],
"mapped",
[
105
]
],
[
[
8561,
8561
],
"mapped",
[
105,
105
]
],
[
[
8562,
8562
],
"mapped",
[
105,
105,
105
]
],
[
[
8563,
8563
],
"mapped",
[
105,
118
]
],
[
[
8564,
8564
],
"mapped",
[
118
]
],
[
[
8565,
8565
],
"mapped",
[
118,
105
]
],
[
[
8566,
8566
],
"mapped",
[
118,
105,
105
]
],
[
[
8567,
8567
],
"mapped",
[
118,
105,
105,
105
]
],
[
[
8568,
8568
],
"mapped",
[
105,
120
]
],
[
[
8569,
8569
],
"mapped",
[
120
]
],
[
[
8570,
8570
],
"mapped",
[
120,
105
]
],
[
[
8571,
8571
],
"mapped",
[
120,
105,
105
]
],
[
[
8572,
8572
],
"mapped",
[
108
]
],
[
[
8573,
8573
],
"mapped",
[
99
]
],
[
[
8574,
8574
],
"mapped",
[
100
]
],
[
[
8575,
8575
],
"mapped",
[
109
]
],
[
[
8576,
8578
],
"valid",
[
],
"NV8"
],
[
[
8579,
8579
],
"disallowed"
],
[
[
8580,
8580
],
"valid"
],
[
[
8581,
8584
],
"valid",
[
],
"NV8"
],
[
[
8585,
8585
],
"mapped",
[
48,
8260,
51
]
],
[
[
8586,
8587
],
"valid",
[
],
"NV8"
],
[
[
8588,
8591
],
"disallowed"
],
[
[
8592,
8682
],
"valid",
[
],
"NV8"
],
[
[
8683,
8691
],
"valid",
[
],
"NV8"
],
[
[
8692,
8703
],
"valid",
[
],
"NV8"
],
[
[
8704,
8747
],
"valid",
[
],
"NV8"
],
[
[
8748,
8748
],
"mapped",
[
8747,
8747
]
],
[
[
8749,
8749
],
"mapped",
[
8747,
8747,
8747
]
],
[
[
8750,
8750
],
"valid",
[
],
"NV8"
],
[
[
8751,
8751
],
"mapped",
[
8750,
8750
]
],
[
[
8752,
8752
],
"mapped",
[
8750,
8750,
8750
]
],
[
[
8753,
8799
],
"valid",
[
],
"NV8"
],
[
[
8800,
8800
],
"disallowed_STD3_valid"
],
[
[
8801,
8813
],
"valid",
[
],
"NV8"
],
[
[
8814,
8815
],
"disallowed_STD3_valid"
],
[
[
8816,
8945
],
"valid",
[
],
"NV8"
],
[
[
8946,
8959
],
"valid",
[
],
"NV8"
],
[
[
8960,
8960
],
"valid",
[
],
"NV8"
],
[
[
8961,
8961
],
"valid",
[
],
"NV8"
],
[
[
8962,
9000
],
"valid",
[
],
"NV8"
],
[
[
9001,
9001
],
"mapped",
[
12296
]
],
[
[
9002,
9002
],
"mapped",
[
12297
]
],
[
[
9003,
9082
],
"valid",
[
],
"NV8"
],
[
[
9083,
9083
],
"valid",
[
],
"NV8"
],
[
[
9084,
9084
],
"valid",
[
],
"NV8"
],
[
[
9085,
9114
],
"valid",
[
],
"NV8"
],
[
[
9115,
9166
],
"valid",
[
],
"NV8"
],
[
[
9167,
9168
],
"valid",
[
],
"NV8"
],
[
[
9169,
9179
],
"valid",
[
],
"NV8"
],
[
[
9180,
9191
],
"valid",
[
],
"NV8"
],
[
[
9192,
9192
],
"valid",
[
],
"NV8"
],
[
[
9193,
9203
],
"valid",
[
],
"NV8"
],
[
[
9204,
9210
],
"valid",
[
],
"NV8"
],
[
[
9211,
9215
],
"disallowed"
],
[
[
9216,
9252
],
"valid",
[
],
"NV8"
],
[
[
9253,
9254
],
"valid",
[
],
"NV8"
],
[
[
9255,
9279
],
"disallowed"
],
[
[
9280,
9290
],
"valid",
[
],
"NV8"
],
[
[
9291,
9311
],
"disallowed"
],
[
[
9312,
9312
],
"mapped",
[
49
]
],
[
[
9313,
9313
],
"mapped",
[
50
]
],
[
[
9314,
9314
],
"mapped",
[
51
]
],
[
[
9315,
9315
],
"mapped",
[
52
]
],
[
[
9316,
9316
],
"mapped",
[
53
]
],
[
[
9317,
9317
],
"mapped",
[
54
]
],
[
[
9318,
9318
],
"mapped",
[
55
]
],
[
[
9319,
9319
],
"mapped",
[
56
]
],
[
[
9320,
9320
],
"mapped",
[
57
]
],
[
[
9321,
9321
],
"mapped",
[
49,
48
]
],
[
[
9322,
9322
],
"mapped",
[
49,
49
]
],
[
[
9323,
9323
],
"mapped",
[
49,
50
]
],
[
[
9324,
9324
],
"mapped",
[
49,
51
]
],
[
[
9325,
9325
],
"mapped",
[
49,
52
]
],
[
[
9326,
9326
],
"mapped",
[
49,
53
]
],
[
[
9327,
9327
],
"mapped",
[
49,
54
]
],
[
[
9328,
9328
],
"mapped",
[
49,
55
]
],
[
[
9329,
9329
],
"mapped",
[
49,
56
]
],
[
[
9330,
9330
],
"mapped",
[
49,
57
]
],
[
[
9331,
9331
],
"mapped",
[
50,
48
]
],
[
[
9332,
9332
],
"disallowed_STD3_mapped",
[
40,
49,
41
]
],
[
[
9333,
9333
],
"disallowed_STD3_mapped",
[
40,
50,
41
]
],
[
[
9334,
9334
],
"disallowed_STD3_mapped",
[
40,
51,
41
]
],
[
[
9335,
9335
],
"disallowed_STD3_mapped",
[
40,
52,
41
]
],
[
[
9336,
9336
],
"disallowed_STD3_mapped",
[
40,
53,
41
]
],
[
[
9337,
9337
],
"disallowed_STD3_mapped",
[
40,
54,
41
]
],
[
[
9338,
9338
],
"disallowed_STD3_mapped",
[
40,
55,
41
]
],
[
[
9339,
9339
],
"disallowed_STD3_mapped",
[
40,
56,
41
]
],
[
[
9340,
9340
],
"disallowed_STD3_mapped",
[
40,
57,
41
]
],
[
[
9341,
9341
],
"disallowed_STD3_mapped",
[
40,
49,
48,
41
]
],
[
[
9342,
9342
],
"disallowed_STD3_mapped",
[
40,
49,
49,
41
]
],
[
[
9343,
9343
],
"disallowed_STD3_mapped",
[
40,
49,
50,
41
]
],
[
[
9344,
9344
],
"disallowed_STD3_mapped",
[
40,
49,
51,
41
]
],
[
[
9345,
9345
],
"disallowed_STD3_mapped",
[
40,
49,
52,
41
]
],
[
[
9346,
9346
],
"disallowed_STD3_mapped",
[
40,
49,
53,
41
]
],
[
[
9347,
9347
],
"disallowed_STD3_mapped",
[
40,
49,
54,
41
]
],
[
[
9348,
9348
],
"disallowed_STD3_mapped",
[
40,
49,
55,
41
]
],
[
[
9349,
9349
],
"disallowed_STD3_mapped",
[
40,
49,
56,
41
]
],
[
[
9350,
9350
],
"disallowed_STD3_mapped",
[
40,
49,
57,
41
]
],
[
[
9351,
9351
],
"disallowed_STD3_mapped",
[
40,
50,
48,
41
]
],
[
[
9352,
9371
],
"disallowed"
],
[
[
9372,
9372
],
"disallowed_STD3_mapped",
[
40,
97,
41
]
],
[
[
9373,
9373
],
"disallowed_STD3_mapped",
[
40,
98,
41
]
],
[
[
9374,
9374
],
"disallowed_STD3_mapped",
[
40,
99,
41
]
],
[
[
9375,
9375
],
"disallowed_STD3_mapped",
[
40,
100,
41
]
],
[
[
9376,
9376
],
"disallowed_STD3_mapped",
[
40,
101,
41
]
],
[
[
9377,
9377
],
"disallowed_STD3_mapped",
[
40,
102,
41
]
],
[
[
9378,
9378
],
"disallowed_STD3_mapped",
[
40,
103,
41
]
],
[
[
9379,
9379
],
"disallowed_STD3_mapped",
[
40,
104,
41
]
],
[
[
9380,
9380
],
"disallowed_STD3_mapped",
[
40,
105,
41
]
],
[
[
9381,
9381
],
"disallowed_STD3_mapped",
[
40,
106,
41
]
],
[
[
9382,
9382
],
"disallowed_STD3_mapped",
[
40,
107,
41
]
],
[
[
9383,
9383
],
"disallowed_STD3_mapped",
[
40,
108,
41
]
],
[
[
9384,
9384
],
"disallowed_STD3_mapped",
[
40,
109,
41
]
],
[
[
9385,
9385
],
"disallowed_STD3_mapped",
[
40,
110,
41
]
],
[
[
9386,
9386
],
"disallowed_STD3_mapped",
[
40,
111,
41
]
],
[
[
9387,
9387
],
"disallowed_STD3_mapped",
[
40,
112,
41
]
],
[
[
9388,
9388
],
"disallowed_STD3_mapped",
[
40,
113,
41
]
],
[
[
9389,
9389
],
"disallowed_STD3_mapped",
[
40,
114,
41
]
],
[
[
9390,
9390
],
"disallowed_STD3_mapped",
[
40,
115,
41
]
],
[
[
9391,
9391
],
"disallowed_STD3_mapped",
[
40,
116,
41
]
],
[
[
9392,
9392
],
"disallowed_STD3_mapped",
[
40,
117,
41
]
],
[
[
9393,
9393
],
"disallowed_STD3_mapped",
[
40,
118,
41
]
],
[
[
9394,
9394
],
"disallowed_STD3_mapped",
[
40,
119,
41
]
],
[
[
9395,
9395
],
"disallowed_STD3_mapped",
[
40,
120,
41
]
],
[
[
9396,
9396
],
"disallowed_STD3_mapped",
[
40,
121,
41
]
],
[
[
9397,
9397
],
"disallowed_STD3_mapped",
[
40,
122,
41
]
],
[
[
9398,
9398
],
"mapped",
[
97
]
],
[
[
9399,
9399
],
"mapped",
[
98
]
],
[
[
9400,
9400
],
"mapped",
[
99
]
],
[
[
9401,
9401
],
"mapped",
[
100
]
],
[
[
9402,
9402
],
"mapped",
[
101
]
],
[
[
9403,
9403
],
"mapped",
[
102
]
],
[
[
9404,
9404
],
"mapped",
[
103
]
],
[
[
9405,
9405
],
"mapped",
[
104
]
],
[
[
9406,
9406
],
"mapped",
[
105
]
],
[
[
9407,
9407
],
"mapped",
[
106
]
],
[
[
9408,
9408
],
"mapped",
[
107
]
],
[
[
9409,
9409
],
"mapped",
[
108
]
],
[
[
9410,
9410
],
"mapped",
[
109
]
],
[
[
9411,
9411
],
"mapped",
[
110
]
],
[
[
9412,
9412
],
"mapped",
[
111
]
],
[
[
9413,
9413
],
"mapped",
[
112
]
],
[
[
9414,
9414
],
"mapped",
[
113
]
],
[
[
9415,
9415
],
"mapped",
[
114
]
],
[
[
9416,
9416
],
"mapped",
[
115
]
],
[
[
9417,
9417
],
"mapped",
[
116
]
],
[
[
9418,
9418
],
"mapped",
[
117
]
],
[
[
9419,
9419
],
"mapped",
[
118
]
],
[
[
9420,
9420
],
"mapped",
[
119
]
],
[
[
9421,
9421
],
"mapped",
[
120
]
],
[
[
9422,
9422
],
"mapped",
[
121
]
],
[
[
9423,
9423
],
"mapped",
[
122
]
],
[
[
9424,
9424
],
"mapped",
[
97
]
],
[
[
9425,
9425
],
"mapped",
[
98
]
],
[
[
9426,
9426
],
"mapped",
[
99
]
],
[
[
9427,
9427
],
"mapped",
[
100
]
],
[
[
9428,
9428
],
"mapped",
[
101
]
],
[
[
9429,
9429
],
"mapped",
[
102
]
],
[
[
9430,
9430
],
"mapped",
[
103
]
],
[
[
9431,
9431
],
"mapped",
[
104
]
],
[
[
9432,
9432
],
"mapped",
[
105
]
],
[
[
9433,
9433
],
"mapped",
[
106
]
],
[
[
9434,
9434
],
"mapped",
[
107
]
],
[
[
9435,
9435
],
"mapped",
[
108
]
],
[
[
9436,
9436
],
"mapped",
[
109
]
],
[
[
9437,
9437
],
"mapped",
[
110
]
],
[
[
9438,
9438
],
"mapped",
[
111
]
],
[
[
9439,
9439
],
"mapped",
[
112
]
],
[
[
9440,
9440
],
"mapped",
[
113
]
],
[
[
9441,
9441
],
"mapped",
[
114
]
],
[
[
9442,
9442
],
"mapped",
[
115
]
],
[
[
9443,
9443
],
"mapped",
[
116
]
],
[
[
9444,
9444
],
"mapped",
[
117
]
],
[
[
9445,
9445
],
"mapped",
[
118
]
],
[
[
9446,
9446
],
"mapped",
[
119
]
],
[
[
9447,
9447
],
"mapped",
[
120
]
],
[
[
9448,
9448
],
"mapped",
[
121
]
],
[
[
9449,
9449
],
"mapped",
[
122
]
],
[
[
9450,
9450
],
"mapped",
[
48
]
],
[
[
9451,
9470
],
"valid",
[
],
"NV8"
],
[
[
9471,
9471
],
"valid",
[
],
"NV8"
],
[
[
9472,
9621
],
"valid",
[
],
"NV8"
],
[
[
9622,
9631
],
"valid",
[
],
"NV8"
],
[
[
9632,
9711
],
"valid",
[
],
"NV8"
],
[
[
9712,
9719
],
"valid",
[
],
"NV8"
],
[
[
9720,
9727
],
"valid",
[
],
"NV8"
],
[
[
9728,
9747
],
"valid",
[
],
"NV8"
],
[
[
9748,
9749
],
"valid",
[
],
"NV8"
],
[
[
9750,
9751
],
"valid",
[
],
"NV8"
],
[
[
9752,
9752
],
"valid",
[
],
"NV8"
],
[
[
9753,
9753
],
"valid",
[
],
"NV8"
],
[
[
9754,
9839
],
"valid",
[
],
"NV8"
],
[
[
9840,
9841
],
"valid",
[
],
"NV8"
],
[
[
9842,
9853
],
"valid",
[
],
"NV8"
],
[
[
9854,
9855
],
"valid",
[
],
"NV8"
],
[
[
9856,
9865
],
"valid",
[
],
"NV8"
],
[
[
9866,
9873
],
"valid",
[
],
"NV8"
],
[
[
9874,
9884
],
"valid",
[
],
"NV8"
],
[
[
9885,
9885
],
"valid",
[
],
"NV8"
],
[
[
9886,
9887
],
"valid",
[
],
"NV8"
],
[
[
9888,
9889
],
"valid",
[
],
"NV8"
],
[
[
9890,
9905
],
"valid",
[
],
"NV8"
],
[
[
9906,
9906
],
"valid",
[
],
"NV8"
],
[
[
9907,
9916
],
"valid",
[
],
"NV8"
],
[
[
9917,
9919
],
"valid",
[
],
"NV8"
],
[
[
9920,
9923
],
"valid",
[
],
"NV8"
],
[
[
9924,
9933
],
"valid",
[
],
"NV8"
],
[
[
9934,
9934
],
"valid",
[
],
"NV8"
],
[
[
9935,
9953
],
"valid",
[
],
"NV8"
],
[
[
9954,
9954
],
"valid",
[
],
"NV8"
],
[
[
9955,
9955
],
"valid",
[
],
"NV8"
],
[
[
9956,
9959
],
"valid",
[
],
"NV8"
],
[
[
9960,
9983
],
"valid",
[
],
"NV8"
],
[
[
9984,
9984
],
"valid",
[
],
"NV8"
],
[
[
9985,
9988
],
"valid",
[
],
"NV8"
],
[
[
9989,
9989
],
"valid",
[
],
"NV8"
],
[
[
9990,
9993
],
"valid",
[
],
"NV8"
],
[
[
9994,
9995
],
"valid",
[
],
"NV8"
],
[
[
9996,
10023
],
"valid",
[
],
"NV8"
],
[
[
10024,
10024
],
"valid",
[
],
"NV8"
],
[
[
10025,
10059
],
"valid",
[
],
"NV8"
],
[
[
10060,
10060
],
"valid",
[
],
"NV8"
],
[
[
10061,
10061
],
"valid",
[
],
"NV8"
],
[
[
10062,
10062
],
"valid",
[
],
"NV8"
],
[
[
10063,
10066
],
"valid",
[
],
"NV8"
],
[
[
10067,
10069
],
"valid",
[
],
"NV8"
],
[
[
10070,
10070
],
"valid",
[
],
"NV8"
],
[
[
10071,
10071
],
"valid",
[
],
"NV8"
],
[
[
10072,
10078
],
"valid",
[
],
"NV8"
],
[
[
10079,
10080
],
"valid",
[
],
"NV8"
],
[
[
10081,
10087
],
"valid",
[
],
"NV8"
],
[
[
10088,
10101
],
"valid",
[
],
"NV8"
],
[
[
10102,
10132
],
"valid",
[
],
"NV8"
],
[
[
10133,
10135
],
"valid",
[
],
"NV8"
],
[
[
10136,
10159
],
"valid",
[
],
"NV8"
],
[
[
10160,
10160
],
"valid",
[
],
"NV8"
],
[
[
10161,
10174
],
"valid",
[
],
"NV8"
],
[
[
10175,
10175
],
"valid",
[
],
"NV8"
],
[
[
10176,
10182
],
"valid",
[
],
"NV8"
],
[
[
10183,
10186
],
"valid",
[
],
"NV8"
],
[
[
10187,
10187
],
"valid",
[
],
"NV8"
],
[
[
10188,
10188
],
"valid",
[
],
"NV8"
],
[
[
10189,
10189
],
"valid",
[
],
"NV8"
],
[
[
10190,
10191
],
"valid",
[
],
"NV8"
],
[
[
10192,
10219
],
"valid",
[
],
"NV8"
],
[
[
10220,
10223
],
"valid",
[
],
"NV8"
],
[
[
10224,
10239
],
"valid",
[
],
"NV8"
],
[
[
10240,
10495
],
"valid",
[
],
"NV8"
],
[
[
10496,
10763
],
"valid",
[
],
"NV8"
],
[
[
10764,
10764
],
"mapped",
[
8747,
8747,
8747,
8747
]
],
[
[
10765,
10867
],
"valid",
[
],
"NV8"
],
[
[
10868,
10868
],
"disallowed_STD3_mapped",
[
58,
58,
61
]
],
[
[
10869,
10869
],
"disallowed_STD3_mapped",
[
61,
61
]
],
[
[
10870,
10870
],
"disallowed_STD3_mapped",
[
61,
61,
61
]
],
[
[
10871,
10971
],
"valid",
[
],
"NV8"
],
[
[
10972,
10972
],
"mapped",
[
10973,
824
]
],
[
[
10973,
11007
],
"valid",
[
],
"NV8"
],
[
[
11008,
11021
],
"valid",
[
],
"NV8"
],
[
[
11022,
11027
],
"valid",
[
],
"NV8"
],
[
[
11028,
11034
],
"valid",
[
],
"NV8"
],
[
[
11035,
11039
],
"valid",
[
],
"NV8"
],
[
[
11040,
11043
],
"valid",
[
],
"NV8"
],
[
[
11044,
11084
],
"valid",
[
],
"NV8"
],
[
[
11085,
11087
],
"valid",
[
],
"NV8"
],
[
[
11088,
11092
],
"valid",
[
],
"NV8"
],
[
[
11093,
11097
],
"valid",
[
],
"NV8"
],
[
[
11098,
11123
],
"valid",
[
],
"NV8"
],
[
[
11124,
11125
],
"disallowed"
],
[
[
11126,
11157
],
"valid",
[
],
"NV8"
],
[
[
11158,
11159
],
"disallowed"
],
[
[
11160,
11193
],
"valid",
[
],
"NV8"
],
[
[
11194,
11196
],
"disallowed"
],
[
[
11197,
11208
],
"valid",
[
],
"NV8"
],
[
[
11209,
11209
],
"disallowed"
],
[
[
11210,
11217
],
"valid",
[
],
"NV8"
],
[
[
11218,
11243
],
"disallowed"
],
[
[
11244,
11247
],
"valid",
[
],
"NV8"
],
[
[
11248,
11263
],
"disallowed"
],
[
[
11264,
11264
],
"mapped",
[
11312
]
],
[
[
11265,
11265
],
"mapped",
[
11313
]
],
[
[
11266,
11266
],
"mapped",
[
11314
]
],
[
[
11267,
11267
],
"mapped",
[
11315
]
],
[
[
11268,
11268
],
"mapped",
[
11316
]
],
[
[
11269,
11269
],
"mapped",
[
11317
]
],
[
[
11270,
11270
],
"mapped",
[
11318
]
],
[
[
11271,
11271
],
"mapped",
[
11319
]
],
[
[
11272,
11272
],
"mapped",
[
11320
]
],
[
[
11273,
11273
],
"mapped",
[
11321
]
],
[
[
11274,
11274
],
"mapped",
[
11322
]
],
[
[
11275,
11275
],
"mapped",
[
11323
]
],
[
[
11276,
11276
],
"mapped",
[
11324
]
],
[
[
11277,
11277
],
"mapped",
[
11325
]
],
[
[
11278,
11278
],
"mapped",
[
11326
]
],
[
[
11279,
11279
],
"mapped",
[
11327
]
],
[
[
11280,
11280
],
"mapped",
[
11328
]
],
[
[
11281,
11281
],
"mapped",
[
11329
]
],
[
[
11282,
11282
],
"mapped",
[
11330
]
],
[
[
11283,
11283
],
"mapped",
[
11331
]
],
[
[
11284,
11284
],
"mapped",
[
11332
]
],
[
[
11285,
11285
],
"mapped",
[
11333
]
],
[
[
11286,
11286
],
"mapped",
[
11334
]
],
[
[
11287,
11287
],
"mapped",
[
11335
]
],
[
[
11288,
11288
],
"mapped",
[
11336
]
],
[
[
11289,
11289
],
"mapped",
[
11337
]
],
[
[
11290,
11290
],
"mapped",
[
11338
]
],
[
[
11291,
11291
],
"mapped",
[
11339
]
],
[
[
11292,
11292
],
"mapped",
[
11340
]
],
[
[
11293,
11293
],
"mapped",
[
11341
]
],
[
[
11294,
11294
],
"mapped",
[
11342
]
],
[
[
11295,
11295
],
"mapped",
[
11343
]
],
[
[
11296,
11296
],
"mapped",
[
11344
]
],
[
[
11297,
11297
],
"mapped",
[
11345
]
],
[
[
11298,
11298
],
"mapped",
[
11346
]
],
[
[
11299,
11299
],
"mapped",
[
11347
]
],
[
[
11300,
11300
],
"mapped",
[
11348
]
],
[
[
11301,
11301
],
"mapped",
[
11349
]
],
[
[
11302,
11302
],
"mapped",
[
11350
]
],
[
[
11303,
11303
],
"mapped",
[
11351
]
],
[
[
11304,
11304
],
"mapped",
[
11352
]
],
[
[
11305,
11305
],
"mapped",
[
11353
]
],
[
[
11306,
11306
],
"mapped",
[
11354
]
],
[
[
11307,
11307
],
"mapped",
[
11355
]
],
[
[
11308,
11308
],
"mapped",
[
11356
]
],
[
[
11309,
11309
],
"mapped",
[
11357
]
],
[
[
11310,
11310
],
"mapped",
[
11358
]
],
[
[
11311,
11311
],
"disallowed"
],
[
[
11312,
11358
],
"valid"
],
[
[
11359,
11359
],
"disallowed"
],
[
[
11360,
11360
],
"mapped",
[
11361
]
],
[
[
11361,
11361
],
"valid"
],
[
[
11362,
11362
],
"mapped",
[
619
]
],
[
[
11363,
11363
],
"mapped",
[
7549
]
],
[
[
11364,
11364
],
"mapped",
[
637
]
],
[
[
11365,
11366
],
"valid"
],
[
[
11367,
11367
],
"mapped",
[
11368
]
],
[
[
11368,
11368
],
"valid"
],
[
[
11369,
11369
],
"mapped",
[
11370
]
],
[
[
11370,
11370
],
"valid"
],
[
[
11371,
11371
],
"mapped",
[
11372
]
],
[
[
11372,
11372
],
"valid"
],
[
[
11373,
11373
],
"mapped",
[
593
]
],
[
[
11374,
11374
],
"mapped",
[
625
]
],
[
[
11375,
11375
],
"mapped",
[
592
]
],
[
[
11376,
11376
],
"mapped",
[
594
]
],
[
[
11377,
11377
],
"valid"
],
[
[
11378,
11378
],
"mapped",
[
11379
]
],
[
[
11379,
11379
],
"valid"
],
[
[
11380,
11380
],
"valid"
],
[
[
11381,
11381
],
"mapped",
[
11382
]
],
[
[
11382,
11383
],
"valid"
],
[
[
11384,
11387
],
"valid"
],
[
[
11388,
11388
],
"mapped",
[
106
]
],
[
[
11389,
11389
],
"mapped",
[
118
]
],
[
[
11390,
11390
],
"mapped",
[
575
]
],
[
[
11391,
11391
],
"mapped",
[
576
]
],
[
[
11392,
11392
],
"mapped",
[
11393
]
],
[
[
11393,
11393
],
"valid"
],
[
[
11394,
11394
],
"mapped",
[
11395
]
],
[
[
11395,
11395
],
"valid"
],
[
[
11396,
11396
],
"mapped",
[
11397
]
],
[
[
11397,
11397
],
"valid"
],
[
[
11398,
11398
],
"mapped",
[
11399
]
],
[
[
11399,
11399
],
"valid"
],
[
[
11400,
11400
],
"mapped",
[
11401
]
],
[
[
11401,
11401
],
"valid"
],
[
[
11402,
11402
],
"mapped",
[
11403
]
],
[
[
11403,
11403
],
"valid"
],
[
[
11404,
11404
],
"mapped",
[
11405
]
],
[
[
11405,
11405
],
"valid"
],
[
[
11406,
11406
],
"mapped",
[
11407
]
],
[
[
11407,
11407
],
"valid"
],
[
[
11408,
11408
],
"mapped",
[
11409
]
],
[
[
11409,
11409
],
"valid"
],
[
[
11410,
11410
],
"mapped",
[
11411
]
],
[
[
11411,
11411
],
"valid"
],
[
[
11412,
11412
],
"mapped",
[
11413
]
],
[
[
11413,
11413
],
"valid"
],
[
[
11414,
11414
],
"mapped",
[
11415
]
],
[
[
11415,
11415
],
"valid"
],
[
[
11416,
11416
],
"mapped",
[
11417
]
],
[
[
11417,
11417
],
"valid"
],
[
[
11418,
11418
],
"mapped",
[
11419
]
],
[
[
11419,
11419
],
"valid"
],
[
[
11420,
11420
],
"mapped",
[
11421
]
],
[
[
11421,
11421
],
"valid"
],
[
[
11422,
11422
],
"mapped",
[
11423
]
],
[
[
11423,
11423
],
"valid"
],
[
[
11424,
11424
],
"mapped",
[
11425
]
],
[
[
11425,
11425
],
"valid"
],
[
[
11426,
11426
],
"mapped",
[
11427
]
],
[
[
11427,
11427
],
"valid"
],
[
[
11428,
11428
],
"mapped",
[
11429
]
],
[
[
11429,
11429
],
"valid"
],
[
[
11430,
11430
],
"mapped",
[
11431
]
],
[
[
11431,
11431
],
"valid"
],
[
[
11432,
11432
],
"mapped",
[
11433
]
],
[
[
11433,
11433
],
"valid"
],
[
[
11434,
11434
],
"mapped",
[
11435
]
],
[
[
11435,
11435
],
"valid"
],
[
[
11436,
11436
],
"mapped",
[
11437
]
],
[
[
11437,
11437
],
"valid"
],
[
[
11438,
11438
],
"mapped",
[
11439
]
],
[
[
11439,
11439
],
"valid"
],
[
[
11440,
11440
],
"mapped",
[
11441
]
],
[
[
11441,
11441
],
"valid"
],
[
[
11442,
11442
],
"mapped",
[
11443
]
],
[
[
11443,
11443
],
"valid"
],
[
[
11444,
11444
],
"mapped",
[
11445
]
],
[
[
11445,
11445
],
"valid"
],
[
[
11446,
11446
],
"mapped",
[
11447
]
],
[
[
11447,
11447
],
"valid"
],
[
[
11448,
11448
],
"mapped",
[
11449
]
],
[
[
11449,
11449
],
"valid"
],
[
[
11450,
11450
],
"mapped",
[
11451
]
],
[
[
11451,
11451
],
"valid"
],
[
[
11452,
11452
],
"mapped",
[
11453
]
],
[
[
11453,
11453
],
"valid"
],
[
[
11454,
11454
],
"mapped",
[
11455
]
],
[
[
11455,
11455
],
"valid"
],
[
[
11456,
11456
],
"mapped",
[
11457
]
],
[
[
11457,
11457
],
"valid"
],
[
[
11458,
11458
],
"mapped",
[
11459
]
],
[
[
11459,
11459
],
"valid"
],
[
[
11460,
11460
],
"mapped",
[
11461
]
],
[
[
11461,
11461
],
"valid"
],
[
[
11462,
11462
],
"mapped",
[
11463
]
],
[
[
11463,
11463
],
"valid"
],
[
[
11464,
11464
],
"mapped",
[
11465
]
],
[
[
11465,
11465
],
"valid"
],
[
[
11466,
11466
],
"mapped",
[
11467
]
],
[
[
11467,
11467
],
"valid"
],
[
[
11468,
11468
],
"mapped",
[
11469
]
],
[
[
11469,
11469
],
"valid"
],
[
[
11470,
11470
],
"mapped",
[
11471
]
],
[
[
11471,
11471
],
"valid"
],
[
[
11472,
11472
],
"mapped",
[
11473
]
],
[
[
11473,
11473
],
"valid"
],
[
[
11474,
11474
],
"mapped",
[
11475
]
],
[
[
11475,
11475
],
"valid"
],
[
[
11476,
11476
],
"mapped",
[
11477
]
],
[
[
11477,
11477
],
"valid"
],
[
[
11478,
11478
],
"mapped",
[
11479
]
],
[
[
11479,
11479
],
"valid"
],
[
[
11480,
11480
],
"mapped",
[
11481
]
],
[
[
11481,
11481
],
"valid"
],
[
[
11482,
11482
],
"mapped",
[
11483
]
],
[
[
11483,
11483
],
"valid"
],
[
[
11484,
11484
],
"mapped",
[
11485
]
],
[
[
11485,
11485
],
"valid"
],
[
[
11486,
11486
],
"mapped",
[
11487
]
],
[
[
11487,
11487
],
"valid"
],
[
[
11488,
11488
],
"mapped",
[
11489
]
],
[
[
11489,
11489
],
"valid"
],
[
[
11490,
11490
],
"mapped",
[
11491
]
],
[
[
11491,
11492
],
"valid"
],
[
[
11493,
11498
],
"valid",
[
],
"NV8"
],
[
[
11499,
11499
],
"mapped",
[
11500
]
],
[
[
11500,
11500
],
"valid"
],
[
[
11501,
11501
],
"mapped",
[
11502
]
],
[
[
11502,
11505
],
"valid"
],
[
[
11506,
11506
],
"mapped",
[
11507
]
],
[
[
11507,
11507
],
"valid"
],
[
[
11508,
11512
],
"disallowed"
],
[
[
11513,
11519
],
"valid",
[
],
"NV8"
],
[
[
11520,
11557
],
"valid"
],
[
[
11558,
11558
],
"disallowed"
],
[
[
11559,
11559
],
"valid"
],
[
[
11560,
11564
],
"disallowed"
],
[
[
11565,
11565
],
"valid"
],
[
[
11566,
11567
],
"disallowed"
],
[
[
11568,
11621
],
"valid"
],
[
[
11622,
11623
],
"valid"
],
[
[
11624,
11630
],
"disallowed"
],
[
[
11631,
11631
],
"mapped",
[
11617
]
],
[
[
11632,
11632
],
"valid",
[
],
"NV8"
],
[
[
11633,
11646
],
"disallowed"
],
[
[
11647,
11647
],
"valid"
],
[
[
11648,
11670
],
"valid"
],
[
[
11671,
11679
],
"disallowed"
],
[
[
11680,
11686
],
"valid"
],
[
[
11687,
11687
],
"disallowed"
],
[
[
11688,
11694
],
"valid"
],
[
[
11695,
11695
],
"disallowed"
],
[
[
11696,
11702
],
"valid"
],
[
[
11703,
11703
],
"disallowed"
],
[
[
11704,
11710
],
"valid"
],
[
[
11711,
11711
],
"disallowed"
],
[
[
11712,
11718
],
"valid"
],
[
[
11719,
11719
],
"disallowed"
],
[
[
11720,
11726
],
"valid"
],
[
[
11727,
11727
],
"disallowed"
],
[
[
11728,
11734
],
"valid"
],
[
[
11735,
11735
],
"disallowed"
],
[
[
11736,
11742
],
"valid"
],
[
[
11743,
11743
],
"disallowed"
],
[
[
11744,
11775
],
"valid"
],
[
[
11776,
11799
],
"valid",
[
],
"NV8"
],
[
[
11800,
11803
],
"valid",
[
],
"NV8"
],
[
[
11804,
11805
],
"valid",
[
],
"NV8"
],
[
[
11806,
11822
],
"valid",
[
],
"NV8"
],
[
[
11823,
11823
],
"valid"
],
[
[
11824,
11824
],
"valid",
[
],
"NV8"
],
[
[
11825,
11825
],
"valid",
[
],
"NV8"
],
[
[
11826,
11835
],
"valid",
[
],
"NV8"
],
[
[
11836,
11842
],
"valid",
[
],
"NV8"
],
[
[
11843,
11903
],
"disallowed"
],
[
[
11904,
11929
],
"valid",
[
],
"NV8"
],
[
[
11930,
11930
],
"disallowed"
],
[
[
11931,
11934
],
"valid",
[
],
"NV8"
],
[
[
11935,
11935
],
"mapped",
[
27597
]
],
[
[
11936,
12018
],
"valid",
[
],
"NV8"
],
[
[
12019,
12019
],
"mapped",
[
40863
]
],
[
[
12020,
12031
],
"disallowed"
],
[
[
12032,
12032
],
"mapped",
[
19968
]
],
[
[
12033,
12033
],
"mapped",
[
20008
]
],
[
[
12034,
12034
],
"mapped",
[
20022
]
],
[
[
12035,
12035
],
"mapped",
[
20031
]
],
[
[
12036,
12036
],
"mapped",
[
20057
]
],
[
[
12037,
12037
],
"mapped",
[
20101
]
],
[
[
12038,
12038
],
"mapped",
[
20108
]
],
[
[
12039,
12039
],
"mapped",
[
20128
]
],
[
[
12040,
12040
],
"mapped",
[
20154
]
],
[
[
12041,
12041
],
"mapped",
[
20799
]
],
[
[
12042,
12042
],
"mapped",
[
20837
]
],
[
[
12043,
12043
],
"mapped",
[
20843
]
],
[
[
12044,
12044
],
"mapped",
[
20866
]
],
[
[
12045,
12045
],
"mapped",
[
20886
]
],
[
[
12046,
12046
],
"mapped",
[
20907
]
],
[
[
12047,
12047
],
"mapped",
[
20960
]
],
[
[
12048,
12048
],
"mapped",
[
20981
]
],
[
[
12049,
12049
],
"mapped",
[
20992
]
],
[
[
12050,
12050
],
"mapped",
[
21147
]
],
[
[
12051,
12051
],
"mapped",
[
21241
]
],
[
[
12052,
12052
],
"mapped",
[
21269
]
],
[
[
12053,
12053
],
"mapped",
[
21274
]
],
[
[
12054,
12054
],
"mapped",
[
21304
]
],
[
[
12055,
12055
],
"mapped",
[
21313
]
],
[
[
12056,
12056
],
"mapped",
[
21340
]
],
[
[
12057,
12057
],
"mapped",
[
21353
]
],
[
[
12058,
12058
],
"mapped",
[
21378
]
],
[
[
12059,
12059
],
"mapped",
[
21430
]
],
[
[
12060,
12060
],
"mapped",
[
21448
]
],
[
[
12061,
12061
],
"mapped",
[
21475
]
],
[
[
12062,
12062
],
"mapped",
[
22231
]
],
[
[
12063,
12063
],
"mapped",
[
22303
]
],
[
[
12064,
12064
],
"mapped",
[
22763
]
],
[
[
12065,
12065
],
"mapped",
[
22786
]
],
[
[
12066,
12066
],
"mapped",
[
22794
]
],
[
[
12067,
12067
],
"mapped",
[
22805
]
],
[
[
12068,
12068
],
"mapped",
[
22823
]
],
[
[
12069,
12069
],
"mapped",
[
22899
]
],
[
[
12070,
12070
],
"mapped",
[
23376
]
],
[
[
12071,
12071
],
"mapped",
[
23424
]
],
[
[
12072,
12072
],
"mapped",
[
23544
]
],
[
[
12073,
12073
],
"mapped",
[
23567
]
],
[
[
12074,
12074
],
"mapped",
[
23586
]
],
[
[
12075,
12075
],
"mapped",
[
23608
]
],
[
[
12076,
12076
],
"mapped",
[
23662
]
],
[
[
12077,
12077
],
"mapped",
[
23665
]
],
[
[
12078,
12078
],
"mapped",
[
24027
]
],
[
[
12079,
12079
],
"mapped",
[
24037
]
],
[
[
12080,
12080
],
"mapped",
[
24049
]
],
[
[
12081,
12081
],
"mapped",
[
24062
]
],
[
[
12082,
12082
],
"mapped",
[
24178
]
],
[
[
12083,
12083
],
"mapped",
[
24186
]
],
[
[
12084,
12084
],
"mapped",
[
24191
]
],
[
[
12085,
12085
],
"mapped",
[
24308
]
],
[
[
12086,
12086
],
"mapped",
[
24318
]
],
[
[
12087,
12087
],
"mapped",
[
24331
]
],
[
[
12088,
12088
],
"mapped",
[
24339
]
],
[
[
12089,
12089
],
"mapped",
[
24400
]
],
[
[
12090,
12090
],
"mapped",
[
24417
]
],
[
[
12091,
12091
],
"mapped",
[
24435
]
],
[
[
12092,
12092
],
"mapped",
[
24515
]
],
[
[
12093,
12093
],
"mapped",
[
25096
]
],
[
[
12094,
12094
],
"mapped",
[
25142
]
],
[
[
12095,
12095
],
"mapped",
[
25163
]
],
[
[
12096,
12096
],
"mapped",
[
25903
]
],
[
[
12097,
12097
],
"mapped",
[
25908
]
],
[
[
12098,
12098
],
"mapped",
[
25991
]
],
[
[
12099,
12099
],
"mapped",
[
26007
]
],
[
[
12100,
12100
],
"mapped",
[
26020
]
],
[
[
12101,
12101
],
"mapped",
[
26041
]
],
[
[
12102,
12102
],
"mapped",
[
26080
]
],
[
[
12103,
12103
],
"mapped",
[
26085
]
],
[
[
12104,
12104
],
"mapped",
[
26352
]
],
[
[
12105,
12105
],
"mapped",
[
26376
]
],
[
[
12106,
12106
],
"mapped",
[
26408
]
],
[
[
12107,
12107
],
"mapped",
[
27424
]
],
[
[
12108,
12108
],
"mapped",
[
27490
]
],
[
[
12109,
12109
],
"mapped",
[
27513
]
],
[
[
12110,
12110
],
"mapped",
[
27571
]
],
[
[
12111,
12111
],
"mapped",
[
27595
]
],
[
[
12112,
12112
],
"mapped",
[
27604
]
],
[
[
12113,
12113
],
"mapped",
[
27611
]
],
[
[
12114,
12114
],
"mapped",
[
27663
]
],
[
[
12115,
12115
],
"mapped",
[
27668
]
],
[
[
12116,
12116
],
"mapped",
[
27700
]
],
[
[
12117,
12117
],
"mapped",
[
28779
]
],
[
[
12118,
12118
],
"mapped",
[
29226
]
],
[
[
12119,
12119
],
"mapped",
[
29238
]
],
[
[
12120,
12120
],
"mapped",
[
29243
]
],
[
[
12121,
12121
],
"mapped",
[
29247
]
],
[
[
12122,
12122
],
"mapped",
[
29255
]
],
[
[
12123,
12123
],
"mapped",
[
29273
]
],
[
[
12124,
12124
],
"mapped",
[
29275
]
],
[
[
12125,
12125
],
"mapped",
[
29356
]
],
[
[
12126,
12126
],
"mapped",
[
29572
]
],
[
[
12127,
12127
],
"mapped",
[
29577
]
],
[
[
12128,
12128
],
"mapped",
[
29916
]
],
[
[
12129,
12129
],
"mapped",
[
29926
]
],
[
[
12130,
12130
],
"mapped",
[
29976
]
],
[
[
12131,
12131
],
"mapped",
[
29983
]
],
[
[
12132,
12132
],
"mapped",
[
29992
]
],
[
[
12133,
12133
],
"mapped",
[
30000
]
],
[
[
12134,
12134
],
"mapped",
[
30091
]
],
[
[
12135,
12135
],
"mapped",
[
30098
]
],
[
[
12136,
12136
],
"mapped",
[
30326
]
],
[
[
12137,
12137
],
"mapped",
[
30333
]
],
[
[
12138,
12138
],
"mapped",
[
30382
]
],
[
[
12139,
12139
],
"mapped",
[
30399
]
],
[
[
12140,
12140
],
"mapped",
[
30446
]
],
[
[
12141,
12141
],
"mapped",
[
30683
]
],
[
[
12142,
12142
],
"mapped",
[
30690
]
],
[
[
12143,
12143
],
"mapped",
[
30707
]
],
[
[
12144,
12144
],
"mapped",
[
31034
]
],
[
[
12145,
12145
],
"mapped",
[
31160
]
],
[
[
12146,
12146
],
"mapped",
[
31166
]
],
[
[
12147,
12147
],
"mapped",
[
31348
]
],
[
[
12148,
12148
],
"mapped",
[
31435
]
],
[
[
12149,
12149
],
"mapped",
[
31481
]
],
[
[
12150,
12150
],
"mapped",
[
31859
]
],
[
[
12151,
12151
],
"mapped",
[
31992
]
],
[
[
12152,
12152
],
"mapped",
[
32566
]
],
[
[
12153,
12153
],
"mapped",
[
32593
]
],
[
[
12154,
12154
],
"mapped",
[
32650
]
],
[
[
12155,
12155
],
"mapped",
[
32701
]
],
[
[
12156,
12156
],
"mapped",
[
32769
]
],
[
[
12157,
12157
],
"mapped",
[
32780
]
],
[
[
12158,
12158
],
"mapped",
[
32786
]
],
[
[
12159,
12159
],
"mapped",
[
32819
]
],
[
[
12160,
12160
],
"mapped",
[
32895
]
],
[
[
12161,
12161
],
"mapped",
[
32905
]
],
[
[
12162,
12162
],
"mapped",
[
33251
]
],
[
[
12163,
12163
],
"mapped",
[
33258
]
],
[
[
12164,
12164
],
"mapped",
[
33267
]
],
[
[
12165,
12165
],
"mapped",
[
33276
]
],
[
[
12166,
12166
],
"mapped",
[
33292
]
],
[
[
12167,
12167
],
"mapped",
[
33307
]
],
[
[
12168,
12168
],
"mapped",
[
33311
]
],
[
[
12169,
12169
],
"mapped",
[
33390
]
],
[
[
12170,
12170
],
"mapped",
[
33394
]
],
[
[
12171,
12171
],
"mapped",
[
33400
]
],
[
[
12172,
12172
],
"mapped",
[
34381
]
],
[
[
12173,
12173
],
"mapped",
[
34411
]
],
[
[
12174,
12174
],
"mapped",
[
34880
]
],
[
[
12175,
12175
],
"mapped",
[
34892
]
],
[
[
12176,
12176
],
"mapped",
[
34915
]
],
[
[
12177,
12177
],
"mapped",
[
35198
]
],
[
[
12178,
12178
],
"mapped",
[
35211
]
],
[
[
12179,
12179
],
"mapped",
[
35282
]
],
[
[
12180,
12180
],
"mapped",
[
35328
]
],
[
[
12181,
12181
],
"mapped",
[
35895
]
],
[
[
12182,
12182
],
"mapped",
[
35910
]
],
[
[
12183,
12183
],
"mapped",
[
35925
]
],
[
[
12184,
12184
],
"mapped",
[
35960
]
],
[
[
12185,
12185
],
"mapped",
[
35997
]
],
[
[
12186,
12186
],
"mapped",
[
36196
]
],
[
[
12187,
12187
],
"mapped",
[
36208
]
],
[
[
12188,
12188
],
"mapped",
[
36275
]
],
[
[
12189,
12189
],
"mapped",
[
36523
]
],
[
[
12190,
12190
],
"mapped",
[
36554
]
],
[
[
12191,
12191
],
"mapped",
[
36763
]
],
[
[
12192,
12192
],
"mapped",
[
36784
]
],
[
[
12193,
12193
],
"mapped",
[
36789
]
],
[
[
12194,
12194
],
"mapped",
[
37009
]
],
[
[
12195,
12195
],
"mapped",
[
37193
]
],
[
[
12196,
12196
],
"mapped",
[
37318
]
],
[
[
12197,
12197
],
"mapped",
[
37324
]
],
[
[
12198,
12198
],
"mapped",
[
37329
]
],
[
[
12199,
12199
],
"mapped",
[
38263
]
],
[
[
12200,
12200
],
"mapped",
[
38272
]
],
[
[
12201,
12201
],
"mapped",
[
38428
]
],
[
[
12202,
12202
],
"mapped",
[
38582
]
],
[
[
12203,
12203
],
"mapped",
[
38585
]
],
[
[
12204,
12204
],
"mapped",
[
38632
]
],
[
[
12205,
12205
],
"mapped",
[
38737
]
],
[
[
12206,
12206
],
"mapped",
[
38750
]
],
[
[
12207,
12207
],
"mapped",
[
38754
]
],
[
[
12208,
12208
],
"mapped",
[
38761
]
],
[
[
12209,
12209
],
"mapped",
[
38859
]
],
[
[
12210,
12210
],
"mapped",
[
38893
]
],
[
[
12211,
12211
],
"mapped",
[
38899
]
],
[
[
12212,
12212
],
"mapped",
[
38913
]
],
[
[
12213,
12213
],
"mapped",
[
39080
]
],
[
[
12214,
12214
],
"mapped",
[
39131
]
],
[
[
12215,
12215
],
"mapped",
[
39135
]
],
[
[
12216,
12216
],
"mapped",
[
39318
]
],
[
[
12217,
12217
],
"mapped",
[
39321
]
],
[
[
12218,
12218
],
"mapped",
[
39340
]
],
[
[
12219,
12219
],
"mapped",
[
39592
]
],
[
[
12220,
12220
],
"mapped",
[
39640
]
],
[
[
12221,
12221
],
"mapped",
[
39647
]
],
[
[
12222,
12222
],
"mapped",
[
39717
]
],
[
[
12223,
12223
],
"mapped",
[
39727
]
],
[
[
12224,
12224
],
"mapped",
[
39730
]
],
[
[
12225,
12225
],
"mapped",
[
39740
]
],
[
[
12226,
12226
],
"mapped",
[
39770
]
],
[
[
12227,
12227
],
"mapped",
[
40165
]
],
[
[
12228,
12228
],
"mapped",
[
40565
]
],
[
[
12229,
12229
],
"mapped",
[
40575
]
],
[
[
12230,
12230
],
"mapped",
[
40613
]
],
[
[
12231,
12231
],
"mapped",
[
40635
]
],
[
[
12232,
12232
],
"mapped",
[
40643
]
],
[
[
12233,
12233
],
"mapped",
[
40653
]
],
[
[
12234,
12234
],
"mapped",
[
40657
]
],
[
[
12235,
12235
],
"mapped",
[
40697
]
],
[
[
12236,
12236
],
"mapped",
[
40701
]
],
[
[
12237,
12237
],
"mapped",
[
40718
]
],
[
[
12238,
12238
],
"mapped",
[
40723
]
],
[
[
12239,
12239
],
"mapped",
[
40736
]
],
[
[
12240,
12240
],
"mapped",
[
40763
]
],
[
[
12241,
12241
],
"mapped",
[
40778
]
],
[
[
12242,
12242
],
"mapped",
[
40786
]
],
[
[
12243,
12243
],
"mapped",
[
40845
]
],
[
[
12244,
12244
],
"mapped",
[
40860
]
],
[
[
12245,
12245
],
"mapped",
[
40864
]
],
[
[
12246,
12271
],
"disallowed"
],
[
[
12272,
12283
],
"disallowed"
],
[
[
12284,
12287
],
"disallowed"
],
[
[
12288,
12288
],
"disallowed_STD3_mapped",
[
32
]
],
[
[
12289,
12289
],
"valid",
[
],
"NV8"
],
[
[
12290,
12290
],
"mapped",
[
46
]
],
[
[
12291,
12292
],
"valid",
[
],
"NV8"
],
[
[
12293,
12295
],
"valid"
],
[
[
12296,
12329
],
"valid",
[
],
"NV8"
],
[
[
12330,
12333
],
"valid"
],
[
[
12334,
12341
],
"valid",
[
],
"NV8"
],
[
[
12342,
12342
],
"mapped",
[
12306
]
],
[
[
12343,
12343
],
"valid",
[
],
"NV8"
],
[
[
12344,
12344
],
"mapped",
[
21313
]
],
[
[
12345,
12345
],
"mapped",
[
21316
]
],
[
[
12346,
12346
],
"mapped",
[
21317
]
],
[
[
12347,
12347
],
"valid",
[
],
"NV8"
],
[
[
12348,
12348
],
"valid"
],
[
[
12349,
12349
],
"valid",
[
],
"NV8"
],
[
[
12350,
12350
],
"valid",
[
],
"NV8"
],
[
[
12351,
12351
],
"valid",
[
],
"NV8"
],
[
[
12352,
12352
],
"disallowed"
],
[
[
12353,
12436
],
"valid"
],
[
[
12437,
12438
],
"valid"
],
[
[
12439,
12440
],
"disallowed"
],
[
[
12441,
12442
],
"valid"
],
[
[
12443,
12443
],
"disallowed_STD3_mapped",
[
32,
12441
]
],
[
[
12444,
12444
],
"disallowed_STD3_mapped",
[
32,
12442
]
],
[
[
12445,
12446
],
"valid"
],
[
[
12447,
12447
],
"mapped",
[
12424,
12426
]
],
[
[
12448,
12448
],
"valid",
[
],
"NV8"
],
[
[
12449,
12542
],
"valid"
],
[
[
12543,
12543
],
"mapped",
[
12467,
12488
]
],
[
[
12544,
12548
],
"disallowed"
],
[
[
12549,
12588
],
"valid"
],
[
[
12589,
12589
],
"valid"
],
[
[
12590,
12592
],
"disallowed"
],
[
[
12593,
12593
],
"mapped",
[
4352
]
],
[
[
12594,
12594
],
"mapped",
[
4353
]
],
[
[
12595,
12595
],
"mapped",
[
4522
]
],
[
[
12596,
12596
],
"mapped",
[
4354
]
],
[
[
12597,
12597
],
"mapped",
[
4524
]
],
[
[
12598,
12598
],
"mapped",
[
4525
]
],
[
[
12599,
12599
],
"mapped",
[
4355
]
],
[
[
12600,
12600
],
"mapped",
[
4356
]
],
[
[
12601,
12601
],
"mapped",
[
4357
]
],
[
[
12602,
12602
],
"mapped",
[
4528
]
],
[
[
12603,
12603
],
"mapped",
[
4529
]
],
[
[
12604,
12604
],
"mapped",
[
4530
]
],
[
[
12605,
12605
],
"mapped",
[
4531
]
],
[
[
12606,
12606
],
"mapped",
[
4532
]
],
[
[
12607,
12607
],
"mapped",
[
4533
]
],
[
[
12608,
12608
],
"mapped",
[
4378
]
],
[
[
12609,
12609
],
"mapped",
[
4358
]
],
[
[
12610,
12610
],
"mapped",
[
4359
]
],
[
[
12611,
12611
],
"mapped",
[
4360
]
],
[
[
12612,
12612
],
"mapped",
[
4385
]
],
[
[
12613,
12613
],
"mapped",
[
4361
]
],
[
[
12614,
12614
],
"mapped",
[
4362
]
],
[
[
12615,
12615
],
"mapped",
[
4363
]
],
[
[
12616,
12616
],
"mapped",
[
4364
]
],
[
[
12617,
12617
],
"mapped",
[
4365
]
],
[
[
12618,
12618
],
"mapped",
[
4366
]
],
[
[
12619,
12619
],
"mapped",
[
4367
]
],
[
[
12620,
12620
],
"mapped",
[
4368
]
],
[
[
12621,
12621
],
"mapped",
[
4369
]
],
[
[
12622,
12622
],
"mapped",
[
4370
]
],
[
[
12623,
12623
],
"mapped",
[
4449
]
],
[
[
12624,
12624
],
"mapped",
[
4450
]
],
[
[
12625,
12625
],
"mapped",
[
4451
]
],
[
[
12626,
12626
],
"mapped",
[
4452
]
],
[
[
12627,
12627
],
"mapped",
[
4453
]
],
[
[
12628,
12628
],
"mapped",
[
4454
]
],
[
[
12629,
12629
],
"mapped",
[
4455
]
],
[
[
12630,
12630
],
"mapped",
[
4456
]
],
[
[
12631,
12631
],
"mapped",
[
4457
]
],
[
[
12632,
12632
],
"mapped",
[
4458
]
],
[
[
12633,
12633
],
"mapped",
[
4459
]
],
[
[
12634,
12634
],
"mapped",
[
4460
]
],
[
[
12635,
12635
],
"mapped",
[
4461
]
],
[
[
12636,
12636
],
"mapped",
[
4462
]
],
[
[
12637,
12637
],
"mapped",
[
4463
]
],
[
[
12638,
12638
],
"mapped",
[
4464
]
],
[
[
12639,
12639
],
"mapped",
[
4465
]
],
[
[
12640,
12640
],
"mapped",
[
4466
]
],
[
[
12641,
12641
],
"mapped",
[
4467
]
],
[
[
12642,
12642
],
"mapped",
[
4468
]
],
[
[
12643,
12643
],
"mapped",
[
4469
]
],
[
[
12644,
12644
],
"disallowed"
],
[
[
12645,
12645
],
"mapped",
[
4372
]
],
[
[
12646,
12646
],
"mapped",
[
4373
]
],
[
[
12647,
12647
],
"mapped",
[
4551
]
],
[
[
12648,
12648
],
"mapped",
[
4552
]
],
[
[
12649,
12649
],
"mapped",
[
4556
]
],
[
[
12650,
12650
],
"mapped",
[
4558
]
],
[
[
12651,
12651
],
"mapped",
[
4563
]
],
[
[
12652,
12652
],
"mapped",
[
4567
]
],
[
[
12653,
12653
],
"mapped",
[
4569
]
],
[
[
12654,
12654
],
"mapped",
[
4380
]
],
[
[
12655,
12655
],
"mapped",
[
4573
]
],
[
[
12656,
12656
],
"mapped",
[
4575
]
],
[
[
12657,
12657
],
"mapped",
[
4381
]
],
[
[
12658,
12658
],
"mapped",
[
4382
]
],
[
[
12659,
12659
],
"mapped",
[
4384
]
],
[
[
12660,
12660
],
"mapped",
[
4386
]
],
[
[
12661,
12661
],
"mapped",
[
4387
]
],
[
[
12662,
12662
],
"mapped",
[
4391
]
],
[
[
12663,
12663
],
"mapped",
[
4393
]
],
[
[
12664,
12664
],
"mapped",
[
4395
]
],
[
[
12665,
12665
],
"mapped",
[
4396
]
],
[
[
12666,
12666
],
"mapped",
[
4397
]
],
[
[
12667,
12667
],
"mapped",
[
4398
]
],
[
[
12668,
12668
],
"mapped",
[
4399
]
],
[
[
12669,
12669
],
"mapped",
[
4402
]
],
[
[
12670,
12670
],
"mapped",
[
4406
]
],
[
[
12671,
12671
],
"mapped",
[
4416
]
],
[
[
12672,
12672
],
"mapped",
[
4423
]
],
[
[
12673,
12673
],
"mapped",
[
4428
]
],
[
[
12674,
12674
],
"mapped",
[
4593
]
],
[
[
12675,
12675
],
"mapped",
[
4594
]
],
[
[
12676,
12676
],
"mapped",
[
4439
]
],
[
[
12677,
12677
],
"mapped",
[
4440
]
],
[
[
12678,
12678
],
"mapped",
[
4441
]
],
[
[
12679,
12679
],
"mapped",
[
4484
]
],
[
[
12680,
12680
],
"mapped",
[
4485
]
],
[
[
12681,
12681
],
"mapped",
[
4488
]
],
[
[
12682,
12682
],
"mapped",
[
4497
]
],
[
[
12683,
12683
],
"mapped",
[
4498
]
],
[
[
12684,
12684
],
"mapped",
[
4500
]
],
[
[
12685,
12685
],
"mapped",
[
4510
]
],
[
[
12686,
12686
],
"mapped",
[
4513
]
],
[
[
12687,
12687
],
"disallowed"
],
[
[
12688,
12689
],
"valid",
[
],
"NV8"
],
[
[
12690,
12690
],
"mapped",
[
19968
]
],
[
[
12691,
12691
],
"mapped",
[
20108
]
],
[
[
12692,
12692
],
"mapped",
[
19977
]
],
[
[
12693,
12693
],
"mapped",
[
22235
]
],
[
[
12694,
12694
],
"mapped",
[
19978
]
],
[
[
12695,
12695
],
"mapped",
[
20013
]
],
[
[
12696,
12696
],
"mapped",
[
19979
]
],
[
[
12697,
12697
],
"mapped",
[
30002
]
],
[
[
12698,
12698
],
"mapped",
[
20057
]
],
[
[
12699,
12699
],
"mapped",
[
19993
]
],
[
[
12700,
12700
],
"mapped",
[
19969
]
],
[
[
12701,
12701
],
"mapped",
[
22825
]
],
[
[
12702,
12702
],
"mapped",
[
22320
]
],
[
[
12703,
12703
],
"mapped",
[
20154
]
],
[
[
12704,
12727
],
"valid"
],
[
[
12728,
12730
],
"valid"
],
[
[
12731,
12735
],
"disallowed"
],
[
[
12736,
12751
],
"valid",
[
],
"NV8"
],
[
[
12752,
12771
],
"valid",
[
],
"NV8"
],
[
[
12772,
12783
],
"disallowed"
],
[
[
12784,
12799
],
"valid"
],
[
[
12800,
12800
],
"disallowed_STD3_mapped",
[
40,
4352,
41
]
],
[
[
12801,
12801
],
"disallowed_STD3_mapped",
[
40,
4354,
41
]
],
[
[
12802,
12802
],
"disallowed_STD3_mapped",
[
40,
4355,
41
]
],
[
[
12803,
12803
],
"disallowed_STD3_mapped",
[
40,
4357,
41
]
],
[
[
12804,
12804
],
"disallowed_STD3_mapped",
[
40,
4358,
41
]
],
[
[
12805,
12805
],
"disallowed_STD3_mapped",
[
40,
4359,
41
]
],
[
[
12806,
12806
],
"disallowed_STD3_mapped",
[
40,
4361,
41
]
],
[
[
12807,
12807
],
"disallowed_STD3_mapped",
[
40,
4363,
41
]
],
[
[
12808,
12808
],
"disallowed_STD3_mapped",
[
40,
4364,
41
]
],
[
[
12809,
12809
],
"disallowed_STD3_mapped",
[
40,
4366,
41
]
],
[
[
12810,
12810
],
"disallowed_STD3_mapped",
[
40,
4367,
41
]
],
[
[
12811,
12811
],
"disallowed_STD3_mapped",
[
40,
4368,
41
]
],
[
[
12812,
12812
],
"disallowed_STD3_mapped",
[
40,
4369,
41
]
],
[
[
12813,
12813
],
"disallowed_STD3_mapped",
[
40,
4370,
41
]
],
[
[
12814,
12814
],
"disallowed_STD3_mapped",
[
40,
44032,
41
]
],
[
[
12815,
12815
],
"disallowed_STD3_mapped",
[
40,
45208,
41
]
],
[
[
12816,
12816
],
"disallowed_STD3_mapped",
[
40,
45796,
41
]
],
[
[
12817,
12817
],
"disallowed_STD3_mapped",
[
40,
46972,
41
]
],
[
[
12818,
12818
],
"disallowed_STD3_mapped",
[
40,
47560,
41
]
],
[
[
12819,
12819
],
"disallowed_STD3_mapped",
[
40,
48148,
41
]
],
[
[
12820,
12820
],
"disallowed_STD3_mapped",
[
40,
49324,
41
]
],
[
[
12821,
12821
],
"disallowed_STD3_mapped",
[
40,
50500,
41
]
],
[
[
12822,
12822
],
"disallowed_STD3_mapped",
[
40,
51088,
41
]
],
[
[
12823,
12823
],
"disallowed_STD3_mapped",
[
40,
52264,
41
]
],
[
[
12824,
12824
],
"disallowed_STD3_mapped",
[
40,
52852,
41
]
],
[
[
12825,
12825
],
"disallowed_STD3_mapped",
[
40,
53440,
41
]
],
[
[
12826,
12826
],
"disallowed_STD3_mapped",
[
40,
54028,
41
]
],
[
[
12827,
12827
],
"disallowed_STD3_mapped",
[
40,
54616,
41
]
],
[
[
12828,
12828
],
"disallowed_STD3_mapped",
[
40,
51452,
41
]
],
[
[
12829,
12829
],
"disallowed_STD3_mapped",
[
40,
50724,
51204,
41
]
],
[
[
12830,
12830
],
"disallowed_STD3_mapped",
[
40,
50724,
54980,
41
]
],
[
[
12831,
12831
],
"disallowed"
],
[
[
12832,
12832
],
"disallowed_STD3_mapped",
[
40,
19968,
41
]
],
[
[
12833,
12833
],
"disallowed_STD3_mapped",
[
40,
20108,
41
]
],
[
[
12834,
12834
],
"disallowed_STD3_mapped",
[
40,
19977,
41
]
],
[
[
12835,
12835
],
"disallowed_STD3_mapped",
[
40,
22235,
41
]
],
[
[
12836,
12836
],
"disallowed_STD3_mapped",
[
40,
20116,
41
]
],
[
[
12837,
12837
],
"disallowed_STD3_mapped",
[
40,
20845,
41
]
],
[
[
12838,
12838
],
"disallowed_STD3_mapped",
[
40,
19971,
41
]
],
[
[
12839,
12839
],
"disallowed_STD3_mapped",
[
40,
20843,
41
]
],
[
[
12840,
12840
],
"disallowed_STD3_mapped",
[
40,
20061,
41
]
],
[
[
12841,
12841
],
"disallowed_STD3_mapped",
[
40,
21313,
41
]
],
[
[
12842,
12842
],
"disallowed_STD3_mapped",
[
40,
26376,
41
]
],
[
[
12843,
12843
],
"disallowed_STD3_mapped",
[
40,
28779,
41
]
],
[
[
12844,
12844
],
"disallowed_STD3_mapped",
[
40,
27700,
41
]
],
[
[
12845,
12845
],
"disallowed_STD3_mapped",
[
40,
26408,
41
]
],
[
[
12846,
12846
],
"disallowed_STD3_mapped",
[
40,
37329,
41
]
],
[
[
12847,
12847
],
"disallowed_STD3_mapped",
[
40,
22303,
41
]
],
[
[
12848,
12848
],
"disallowed_STD3_mapped",
[
40,
26085,
41
]
],
[
[
12849,
12849
],
"disallowed_STD3_mapped",
[
40,
26666,
41
]
],
[
[
12850,
12850
],
"disallowed_STD3_mapped",
[
40,
26377,
41
]
],
[
[
12851,
12851
],
"disallowed_STD3_mapped",
[
40,
31038,
41
]
],
[
[
12852,
12852
],
"disallowed_STD3_mapped",
[
40,
21517,
41
]
],
[
[
12853,
12853
],
"disallowed_STD3_mapped",
[
40,
29305,
41
]
],
[
[
12854,
12854
],
"disallowed_STD3_mapped",
[
40,
36001,
41
]
],
[
[
12855,
12855
],
"disallowed_STD3_mapped",
[
40,
31069,
41
]
],
[
[
12856,
12856
],
"disallowed_STD3_mapped",
[
40,
21172,
41
]
],
[
[
12857,
12857
],
"disallowed_STD3_mapped",
[
40,
20195,
41
]
],
[
[
12858,
12858
],
"disallowed_STD3_mapped",
[
40,
21628,
41
]
],
[
[
12859,
12859
],
"disallowed_STD3_mapped",
[
40,
23398,
41
]
],
[
[
12860,
12860
],
"disallowed_STD3_mapped",
[
40,
30435,
41
]
],
[
[
12861,
12861
],
"disallowed_STD3_mapped",
[
40,
20225,
41
]
],
[
[
12862,
12862
],
"disallowed_STD3_mapped",
[
40,
36039,
41
]
],
[
[
12863,
12863
],
"disallowed_STD3_mapped",
[
40,
21332,
41
]
],
[
[
12864,
12864
],
"disallowed_STD3_mapped",
[
40,
31085,
41
]
],
[
[
12865,
12865
],
"disallowed_STD3_mapped",
[
40,
20241,
41
]
],
[
[
12866,
12866
],
"disallowed_STD3_mapped",
[
40,
33258,
41
]
],
[
[
12867,
12867
],
"disallowed_STD3_mapped",
[
40,
33267,
41
]
],
[
[
12868,
12868
],
"mapped",
[
21839
]
],
[
[
12869,
12869
],
"mapped",
[
24188
]
],
[
[
12870,
12870
],
"mapped",
[
25991
]
],
[
[
12871,
12871
],
"mapped",
[
31631
]
],
[
[
12872,
12879
],
"valid",
[
],
"NV8"
],
[
[
12880,
12880
],
"mapped",
[
112,
116,
101
]
],
[
[
12881,
12881
],
"mapped",
[
50,
49
]
],
[
[
12882,
12882
],
"mapped",
[
50,
50
]
],
[
[
12883,
12883
],
"mapped",
[
50,
51
]
],
[
[
12884,
12884
],
"mapped",
[
50,
52
]
],
[
[
12885,
12885
],
"mapped",
[
50,
53
]
],
[
[
12886,
12886
],
"mapped",
[
50,
54
]
],
[
[
12887,
12887
],
"mapped",
[
50,
55
]
],
[
[
12888,
12888
],
"mapped",
[
50,
56
]
],
[
[
12889,
12889
],
"mapped",
[
50,
57
]
],
[
[
12890,
12890
],
"mapped",
[
51,
48
]
],
[
[
12891,
12891
],
"mapped",
[
51,
49
]
],
[
[
12892,
12892
],
"mapped",
[
51,
50
]
],
[
[
12893,
12893
],
"mapped",
[
51,
51
]
],
[
[
12894,
12894
],
"mapped",
[
51,
52
]
],
[
[
12895,
12895
],
"mapped",
[
51,
53
]
],
[
[
12896,
12896
],
"mapped",
[
4352
]
],
[
[
12897,
12897
],
"mapped",
[
4354
]
],
[
[
12898,
12898
],
"mapped",
[
4355
]
],
[
[
12899,
12899
],
"mapped",
[
4357
]
],
[
[
12900,
12900
],
"mapped",
[
4358
]
],
[
[
12901,
12901
],
"mapped",
[
4359
]
],
[
[
12902,
12902
],
"mapped",
[
4361
]
],
[
[
12903,
12903
],
"mapped",
[
4363
]
],
[
[
12904,
12904
],
"mapped",
[
4364
]
],
[
[
12905,
12905
],
"mapped",
[
4366
]
],
[
[
12906,
12906
],
"mapped",
[
4367
]
],
[
[
12907,
12907
],
"mapped",
[
4368
]
],
[
[
12908,
12908
],
"mapped",
[
4369
]
],
[
[
12909,
12909
],
"mapped",
[
4370
]
],
[
[
12910,
12910
],
"mapped",
[
44032
]
],
[
[
12911,
12911
],
"mapped",
[
45208
]
],
[
[
12912,
12912
],
"mapped",
[
45796
]
],
[
[
12913,
12913
],
"mapped",
[
46972
]
],
[
[
12914,
12914
],
"mapped",
[
47560
]
],
[
[
12915,
12915
],
"mapped",
[
48148
]
],
[
[
12916,
12916
],
"mapped",
[
49324
]
],
[
[
12917,
12917
],
"mapped",
[
50500
]
],
[
[
12918,
12918
],
"mapped",
[
51088
]
],
[
[
12919,
12919
],
"mapped",
[
52264
]
],
[
[
12920,
12920
],
"mapped",
[
52852
]
],
[
[
12921,
12921
],
"mapped",
[
53440
]
],
[
[
12922,
12922
],
"mapped",
[
54028
]
],
[
[
12923,
12923
],
"mapped",
[
54616
]
],
[
[
12924,
12924
],
"mapped",
[
52280,
44256
]
],
[
[
12925,
12925
],
"mapped",
[
51452,
51032
]
],
[
[
12926,
12926
],
"mapped",
[
50864
]
],
[
[
12927,
12927
],
"valid",
[
],
"NV8"
],
[
[
12928,
12928
],
"mapped",
[
19968
]
],
[
[
12929,
12929
],
"mapped",
[
20108
]
],
[
[
12930,
12930
],
"mapped",
[
19977
]
],
[
[
12931,
12931
],
"mapped",
[
22235
]
],
[
[
12932,
12932
],
"mapped",
[
20116
]
],
[
[
12933,
12933
],
"mapped",
[
20845
]
],
[
[
12934,
12934
],
"mapped",
[
19971
]
],
[
[
12935,
12935
],
"mapped",
[
20843
]
],
[
[
12936,
12936
],
"mapped",
[
20061
]
],
[
[
12937,
12937
],
"mapped",
[
21313
]
],
[
[
12938,
12938
],
"mapped",
[
26376
]
],
[
[
12939,
12939
],
"mapped",
[
28779
]
],
[
[
12940,
12940
],
"mapped",
[
27700
]
],
[
[
12941,
12941
],
"mapped",
[
26408
]
],
[
[
12942,
12942
],
"mapped",
[
37329
]
],
[
[
12943,
12943
],
"mapped",
[
22303
]
],
[
[
12944,
12944
],
"mapped",
[
26085
]
],
[
[
12945,
12945
],
"mapped",
[
26666
]
],
[
[
12946,
12946
],
"mapped",
[
26377
]
],
[
[
12947,
12947
],
"mapped",
[
31038
]
],
[
[
12948,
12948
],
"mapped",
[
21517
]
],
[
[
12949,
12949
],
"mapped",
[
29305
]
],
[
[
12950,
12950
],
"mapped",
[
36001
]
],
[
[
12951,
12951
],
"mapped",
[
31069
]
],
[
[
12952,
12952
],
"mapped",
[
21172
]
],
[
[
12953,
12953
],
"mapped",
[
31192
]
],
[
[
12954,
12954
],
"mapped",
[
30007
]
],
[
[
12955,
12955
],
"mapped",
[
22899
]
],
[
[
12956,
12956
],
"mapped",
[
36969
]
],
[
[
12957,
12957
],
"mapped",
[
20778
]
],
[
[
12958,
12958
],
"mapped",
[
21360
]
],
[
[
12959,
12959
],
"mapped",
[
27880
]
],
[
[
12960,
12960
],
"mapped",
[
38917
]
],
[
[
12961,
12961
],
"mapped",
[
20241
]
],
[
[
12962,
12962
],
"mapped",
[
20889
]
],
[
[
12963,
12963
],
"mapped",
[
27491
]
],
[
[
12964,
12964
],
"mapped",
[
19978
]
],
[
[
12965,
12965
],
"mapped",
[
20013
]
],
[
[
12966,
12966
],
"mapped",
[
19979
]
],
[
[
12967,
12967
],
"mapped",
[
24038
]
],
[
[
12968,
12968
],
"mapped",
[
21491
]
],
[
[
12969,
12969
],
"mapped",
[
21307
]
],
[
[
12970,
12970
],
"mapped",
[
23447
]
],
[
[
12971,
12971
],
"mapped",
[
23398
]
],
[
[
12972,
12972
],
"mapped",
[
30435
]
],
[
[
12973,
12973
],
"mapped",
[
20225
]
],
[
[
12974,
12974
],
"mapped",
[
36039
]
],
[
[
12975,
12975
],
"mapped",
[
21332
]
],
[
[
12976,
12976
],
"mapped",
[
22812
]
],
[
[
12977,
12977
],
"mapped",
[
51,
54
]
],
[
[
12978,
12978
],
"mapped",
[
51,
55
]
],
[
[
12979,
12979
],
"mapped",
[
51,
56
]
],
[
[
12980,
12980
],
"mapped",
[
51,
57
]
],
[
[
12981,
12981
],
"mapped",
[
52,
48
]
],
[
[
12982,
12982
],
"mapped",
[
52,
49
]
],
[
[
12983,
12983
],
"mapped",
[
52,
50
]
],
[
[
12984,
12984
],
"mapped",
[
52,
51
]
],
[
[
12985,
12985
],
"mapped",
[
52,
52
]
],
[
[
12986,
12986
],
"mapped",
[
52,
53
]
],
[
[
12987,
12987
],
"mapped",
[
52,
54
]
],
[
[
12988,
12988
],
"mapped",
[
52,
55
]
],
[
[
12989,
12989
],
"mapped",
[
52,
56
]
],
[
[
12990,
12990
],
"mapped",
[
52,
57
]
],
[
[
12991,
12991
],
"mapped",
[
53,
48
]
],
[
[
12992,
12992
],
"mapped",
[
49,
26376
]
],
[
[
12993,
12993
],
"mapped",
[
50,
26376
]
],
[
[
12994,
12994
],
"mapped",
[
51,
26376
]
],
[
[
12995,
12995
],
"mapped",
[
52,
26376
]
],
[
[
12996,
12996
],
"mapped",
[
53,
26376
]
],
[
[
12997,
12997
],
"mapped",
[
54,
26376
]
],
[
[
12998,
12998
],
"mapped",
[
55,
26376
]
],
[
[
12999,
12999
],
"mapped",
[
56,
26376
]
],
[
[
13000,
13000
],
"mapped",
[
57,
26376
]
],
[
[
13001,
13001
],
"mapped",
[
49,
48,
26376
]
],
[
[
13002,
13002
],
"mapped",
[
49,
49,
26376
]
],
[
[
13003,
13003
],
"mapped",
[
49,
50,
26376
]
],
[
[
13004,
13004
],
"mapped",
[
104,
103
]
],
[
[
13005,
13005
],
"mapped",
[
101,
114,
103
]
],
[
[
13006,
13006
],
"mapped",
[
101,
118
]
],
[
[
13007,
13007
],
"mapped",
[
108,
116,
100
]
],
[
[
13008,
13008
],
"mapped",
[
12450
]
],
[
[
13009,
13009
],
"mapped",
[
12452
]
],
[
[
13010,
13010
],
"mapped",
[
12454
]
],
[
[
13011,
13011
],
"mapped",
[
12456
]
],
[
[
13012,
13012
],
"mapped",
[
12458
]
],
[
[
13013,
13013
],
"mapped",
[
12459
]
],
[
[
13014,
13014
],
"mapped",
[
12461
]
],
[
[
13015,
13015
],
"mapped",
[
12463
]
],
[
[
13016,
13016
],
"mapped",
[
12465
]
],
[
[
13017,
13017
],
"mapped",
[
12467
]
],
[
[
13018,
13018
],
"mapped",
[
12469
]
],
[
[
13019,
13019
],
"mapped",
[
12471
]
],
[
[
13020,
13020
],
"mapped",
[
12473
]
],
[
[
13021,
13021
],
"mapped",
[
12475
]
],
[
[
13022,
13022
],
"mapped",
[
12477
]
],
[
[
13023,
13023
],
"mapped",
[
12479
]
],
[
[
13024,
13024
],
"mapped",
[
12481
]
],
[
[
13025,
13025
],
"mapped",
[
12484
]
],
[
[
13026,
13026
],
"mapped",
[
12486
]
],
[
[
13027,
13027
],
"mapped",
[
12488
]
],
[
[
13028,
13028
],
"mapped",
[
12490
]
],
[
[
13029,
13029
],
"mapped",
[
12491
]
],
[
[
13030,
13030
],
"mapped",
[
12492
]
],
[
[
13031,
13031
],
"mapped",
[
12493
]
],
[
[
13032,
13032
],
"mapped",
[
12494
]
],
[
[
13033,
13033
],
"mapped",
[
12495
]
],
[
[
13034,
13034
],
"mapped",
[
12498
]
],
[
[
13035,
13035
],
"mapped",
[
12501
]
],
[
[
13036,
13036
],
"mapped",
[
12504
]
],
[
[
13037,
13037
],
"mapped",
[
12507
]
],
[
[
13038,
13038
],
"mapped",
[
12510
]
],
[
[
13039,
13039
],
"mapped",
[
12511
]
],
[
[
13040,
13040
],
"mapped",
[
12512
]
],
[
[
13041,
13041
],
"mapped",
[
12513
]
],
[
[
13042,
13042
],
"mapped",
[
12514
]
],
[
[
13043,
13043
],
"mapped",
[
12516
]
],
[
[
13044,
13044
],
"mapped",
[
12518
]
],
[
[
13045,
13045
],
"mapped",
[
12520
]
],
[
[
13046,
13046
],
"mapped",
[
12521
]
],
[
[
13047,
13047
],
"mapped",
[
12522
]
],
[
[
13048,
13048
],
"mapped",
[
12523
]
],
[
[
13049,
13049
],
"mapped",
[
12524
]
],
[
[
13050,
13050
],
"mapped",
[
12525
]
],
[
[
13051,
13051
],
"mapped",
[
12527
]
],
[
[
13052,
13052
],
"mapped",
[
12528
]
],
[
[
13053,
13053
],
"mapped",
[
12529
]
],
[
[
13054,
13054
],
"mapped",
[
12530
]
],
[
[
13055,
13055
],
"disallowed"
],
[
[
13056,
13056
],
"mapped",
[
12450,
12497,
12540,
12488
]
],
[
[
13057,
13057
],
"mapped",
[
12450,
12523,
12501,
12449
]
],
[
[
13058,
13058
],
"mapped",
[
12450,
12531,
12506,
12450
]
],
[
[
13059,
13059
],
"mapped",
[
12450,
12540,
12523
]
],
[
[
13060,
13060
],
"mapped",
[
12452,
12491,
12531,
12464
]
],
[
[
13061,
13061
],
"mapped",
[
12452,
12531,
12481
]
],
[
[
13062,
13062
],
"mapped",
[
12454,
12457,
12531
]
],
[
[
13063,
13063
],
"mapped",
[
12456,
12473,
12463,
12540,
12489
]
],
[
[
13064,
13064
],
"mapped",
[
12456,
12540,
12459,
12540
]
],
[
[
13065,
13065
],
"mapped",
[
12458,
12531,
12473
]
],
[
[
13066,
13066
],
"mapped",
[
12458,
12540,
12512
]
],
[
[
13067,
13067
],
"mapped",
[
12459,
12452,
12522
]
],
[
[
13068,
13068
],
"mapped",
[
12459,
12521,
12483,
12488
]
],
[
[
13069,
13069
],
"mapped",
[
12459,
12525,
12522,
12540
]
],
[
[
13070,
13070
],
"mapped",
[
12460,
12525,
12531
]
],
[
[
13071,
13071
],
"mapped",
[
12460,
12531,
12510
]
],
[
[
13072,
13072
],
"mapped",
[
12462,
12460
]
],
[
[
13073,
13073
],
"mapped",
[
12462,
12491,
12540
]
],
[
[
13074,
13074
],
"mapped",
[
12461,
12517,
12522,
12540
]
],
[
[
13075,
13075
],
"mapped",
[
12462,
12523,
12480,
12540
]
],
[
[
13076,
13076
],
"mapped",
[
12461,
12525
]
],
[
[
13077,
13077
],
"mapped",
[
12461,
12525,
12464,
12521,
12512
]
],
[
[
13078,
13078
],
"mapped",
[
12461,
12525,
12513,
12540,
12488,
12523
]
],
[
[
13079,
13079
],
"mapped",
[
12461,
12525,
12527,
12483,
12488
]
],
[
[
13080,
13080
],
"mapped",
[
12464,
12521,
12512
]
],
[
[
13081,
13081
],
"mapped",
[
12464,
12521,
12512,
12488,
12531
]
],
[
[
13082,
13082
],
"mapped",
[
12463,
12523,
12476,
12452,
12525
]
],
[
[
13083,
13083
],
"mapped",
[
12463,
12525,
12540,
12493
]
],
[
[
13084,
13084
],
"mapped",
[
12465,
12540,
12473
]
],
[
[
13085,
13085
],
"mapped",
[
12467,
12523,
12490
]
],
[
[
13086,
13086
],
"mapped",
[
12467,
12540,
12509
]
],
[
[
13087,
13087
],
"mapped",
[
12469,
12452,
12463,
12523
]
],
[
[
13088,
13088
],
"mapped",
[
12469,
12531,
12481,
12540,
12512
]
],
[
[
13089,
13089
],
"mapped",
[
12471,
12522,
12531,
12464
]
],
[
[
13090,
13090
],
"mapped",
[
12475,
12531,
12481
]
],
[
[
13091,
13091
],
"mapped",
[
12475,
12531,
12488
]
],
[
[
13092,
13092
],
"mapped",
[
12480,
12540,
12473
]
],
[
[
13093,
13093
],
"mapped",
[
12487,
12471
]
],
[
[
13094,
13094
],
"mapped",
[
12489,
12523
]
],
[
[
13095,
13095
],
"mapped",
[
12488,
12531
]
],
[
[
13096,
13096
],
"mapped",
[
12490,
12494
]
],
[
[
13097,
13097
],
"mapped",
[
12494,
12483,
12488
]
],
[
[
13098,
13098
],
"mapped",
[
12495,
12452,
12484
]
],
[
[
13099,
13099
],
"mapped",
[
12497,
12540,
12475,
12531,
12488
]
],
[
[
13100,
13100
],
"mapped",
[
12497,
12540,
12484
]
],
[
[
13101,
13101
],
"mapped",
[
12496,
12540,
12524,
12523
]
],
[
[
13102,
13102
],
"mapped",
[
12500,
12450,
12473,
12488,
12523
]
],
[
[
13103,
13103
],
"mapped",
[
12500,
12463,
12523
]
],
[
[
13104,
13104
],
"mapped",
[
12500,
12467
]
],
[
[
13105,
13105
],
"mapped",
[
12499,
12523
]
],
[
[
13106,
13106
],
"mapped",
[
12501,
12449,
12521,
12483,
12489
]
],
[
[
13107,
13107
],
"mapped",
[
12501,
12451,
12540,
12488
]
],
[
[
13108,
13108
],
"mapped",
[
12502,
12483,
12471,
12455,
12523
]
],
[
[
13109,
13109
],
"mapped",
[
12501,
12521,
12531
]
],
[
[
13110,
13110
],
"mapped",
[
12504,
12463,
12479,
12540,
12523
]
],
[
[
13111,
13111
],
"mapped",
[
12506,
12477
]
],
[
[
13112,
13112
],
"mapped",
[
12506,
12491,
12498
]
],
[
[
13113,
13113
],
"mapped",
[
12504,
12523,
12484
]
],
[
[
13114,
13114
],
"mapped",
[
12506,
12531,
12473
]
],
[
[
13115,
13115
],
"mapped",
[
12506,
12540,
12472
]
],
[
[
13116,
13116
],
"mapped",
[
12505,
12540,
12479
]
],
[
[
13117,
13117
],
"mapped",
[
12509,
12452,
12531,
12488
]
],
[
[
13118,
13118
],
"mapped",
[
12508,
12523,
12488
]
],
[
[
13119,
13119
],
"mapped",
[
12507,
12531
]
],
[
[
13120,
13120
],
"mapped",
[
12509,
12531,
12489
]
],
[
[
13121,
13121
],
"mapped",
[
12507,
12540,
12523
]
],
[
[
13122,
13122
],
"mapped",
[
12507,
12540,
12531
]
],
[
[
13123,
13123
],
"mapped",
[
12510,
12452,
12463,
12525
]
],
[
[
13124,
13124
],
"mapped",
[
12510,
12452,
12523
]
],
[
[
13125,
13125
],
"mapped",
[
12510,
12483,
12495
]
],
[
[
13126,
13126
],
"mapped",
[
12510,
12523,
12463
]
],
[
[
13127,
13127
],
"mapped",
[
12510,
12531,
12471,
12519,
12531
]
],
[
[
13128,
13128
],
"mapped",
[
12511,
12463,
12525,
12531
]
],
[
[
13129,
13129
],
"mapped",
[
12511,
12522
]
],
[
[
13130,
13130
],
"mapped",
[
12511,
12522,
12496,
12540,
12523
]
],
[
[
13131,
13131
],
"mapped",
[
12513,
12460
]
],
[
[
13132,
13132
],
"mapped",
[
12513,
12460,
12488,
12531
]
],
[
[
13133,
13133
],
"mapped",
[
12513,
12540,
12488,
12523
]
],
[
[
13134,
13134
],
"mapped",
[
12516,
12540,
12489
]
],
[
[
13135,
13135
],
"mapped",
[
12516,
12540,
12523
]
],
[
[
13136,
13136
],
"mapped",
[
12518,
12450,
12531
]
],
[
[
13137,
13137
],
"mapped",
[
12522,
12483,
12488,
12523
]
],
[
[
13138,
13138
],
"mapped",
[
12522,
12521
]
],
[
[
13139,
13139
],
"mapped",
[
12523,
12500,
12540
]
],
[
[
13140,
13140
],
"mapped",
[
12523,
12540,
12502,
12523
]
],
[
[
13141,
13141
],
"mapped",
[
12524,
12512
]
],
[
[
13142,
13142
],
"mapped",
[
12524,
12531,
12488,
12466,
12531
]
],
[
[
13143,
13143
],
"mapped",
[
12527,
12483,
12488
]
],
[
[
13144,
13144
],
"mapped",
[
48,
28857
]
],
[
[
13145,
13145
],
"mapped",
[
49,
28857
]
],
[
[
13146,
13146
],
"mapped",
[
50,
28857
]
],
[
[
13147,
13147
],
"mapped",
[
51,
28857
]
],
[
[
13148,
13148
],
"mapped",
[
52,
28857
]
],
[
[
13149,
13149
],
"mapped",
[
53,
28857
]
],
[
[
13150,
13150
],
"mapped",
[
54,
28857
]
],
[
[
13151,
13151
],
"mapped",
[
55,
28857
]
],
[
[
13152,
13152
],
"mapped",
[
56,
28857
]
],
[
[
13153,
13153
],
"mapped",
[
57,
28857
]
],
[
[
13154,
13154
],
"mapped",
[
49,
48,
28857
]
],
[
[
13155,
13155
],
"mapped",
[
49,
49,
28857
]
],
[
[
13156,
13156
],
"mapped",
[
49,
50,
28857
]
],
[
[
13157,
13157
],
"mapped",
[
49,
51,
28857
]
],
[
[
13158,
13158
],
"mapped",
[
49,
52,
28857
]
],
[
[
13159,
13159
],
"mapped",
[
49,
53,
28857
]
],
[
[
13160,
13160
],
"mapped",
[
49,
54,
28857
]
],
[
[
13161,
13161
],
"mapped",
[
49,
55,
28857
]
],
[
[
13162,
13162
],
"mapped",
[
49,
56,
28857
]
],
[
[
13163,
13163
],
"mapped",
[
49,
57,
28857
]
],
[
[
13164,
13164
],
"mapped",
[
50,
48,
28857
]
],
[
[
13165,
13165
],
"mapped",
[
50,
49,
28857
]
],
[
[
13166,
13166
],
"mapped",
[
50,
50,
28857
]
],
[
[
13167,
13167
],
"mapped",
[
50,
51,
28857
]
],
[
[
13168,
13168
],
"mapped",
[
50,
52,
28857
]
],
[
[
13169,
13169
],
"mapped",
[
104,
112,
97
]
],
[
[
13170,
13170
],
"mapped",
[
100,
97
]
],
[
[
13171,
13171
],
"mapped",
[
97,
117
]
],
[
[
13172,
13172
],
"mapped",
[
98,
97,
114
]
],
[
[
13173,
13173
],
"mapped",
[
111,
118
]
],
[
[
13174,
13174
],
"mapped",
[
112,
99
]
],
[
[
13175,
13175
],
"mapped",
[
100,
109
]
],
[
[
13176,
13176
],
"mapped",
[
100,
109,
50
]
],
[
[
13177,
13177
],
"mapped",
[
100,
109,
51
]
],
[
[
13178,
13178
],
"mapped",
[
105,
117
]
],
[
[
13179,
13179
],
"mapped",
[
24179,
25104
]
],
[
[
13180,
13180
],
"mapped",
[
26157,
21644
]
],
[
[
13181,
13181
],
"mapped",
[
22823,
27491
]
],
[
[
13182,
13182
],
"mapped",
[
26126,
27835
]
],
[
[
13183,
13183
],
"mapped",
[
26666,
24335,
20250,
31038
]
],
[
[
13184,
13184
],
"mapped",
[
112,
97
]
],
[
[
13185,
13185
],
"mapped",
[
110,
97
]
],
[
[
13186,
13186
],
"mapped",
[
956,
97
]
],
[
[
13187,
13187
],
"mapped",
[
109,
97
]
],
[
[
13188,
13188
],
"mapped",
[
107,
97
]
],
[
[
13189,
13189
],
"mapped",
[
107,
98
]
],
[
[
13190,
13190
],
"mapped",
[
109,
98
]
],
[
[
13191,
13191
],
"mapped",
[
103,
98
]
],
[
[
13192,
13192
],
"mapped",
[
99,
97,
108
]
],
[
[
13193,
13193
],
"mapped",
[
107,
99,
97,
108
]
],
[
[
13194,
13194
],
"mapped",
[
112,
102
]
],
[
[
13195,
13195
],
"mapped",
[
110,
102
]
],
[
[
13196,
13196
],
"mapped",
[
956,
102
]
],
[
[
13197,
13197
],
"mapped",
[
956,
103
]
],
[
[
13198,
13198
],
"mapped",
[
109,
103
]
],
[
[
13199,
13199
],
"mapped",
[
107,
103
]
],
[
[
13200,
13200
],
"mapped",
[
104,
122
]
],
[
[
13201,
13201
],
"mapped",
[
107,
104,
122
]
],
[
[
13202,
13202
],
"mapped",
[
109,
104,
122
]
],
[
[
13203,
13203
],
"mapped",
[
103,
104,
122
]
],
[
[
13204,
13204
],
"mapped",
[
116,
104,
122
]
],
[
[
13205,
13205
],
"mapped",
[
956,
108
]
],
[
[
13206,
13206
],
"mapped",
[
109,
108
]
],
[
[
13207,
13207
],
"mapped",
[
100,
108
]
],
[
[
13208,
13208
],
"mapped",
[
107,
108
]
],
[
[
13209,
13209
],
"mapped",
[
102,
109
]
],
[
[
13210,
13210
],
"mapped",
[
110,
109
]
],
[
[
13211,
13211
],
"mapped",
[
956,
109
]
],
[
[
13212,
13212
],
"mapped",
[
109,
109
]
],
[
[
13213,
13213
],
"mapped",
[
99,
109
]
],
[
[
13214,
13214
],
"mapped",
[
107,
109
]
],
[
[
13215,
13215
],
"mapped",
[
109,
109,
50
]
],
[
[
13216,
13216
],
"mapped",
[
99,
109,
50
]
],
[
[
13217,
13217
],
"mapped",
[
109,
50
]
],
[
[
13218,
13218
],
"mapped",
[
107,
109,
50
]
],
[
[
13219,
13219
],
"mapped",
[
109,
109,
51
]
],
[
[
13220,
13220
],
"mapped",
[
99,
109,
51
]
],
[
[
13221,
13221
],
"mapped",
[
109,
51
]
],
[
[
13222,
13222
],
"mapped",
[
107,
109,
51
]
],
[
[
13223,
13223
],
"mapped",
[
109,
8725,
115
]
],
[
[
13224,
13224
],
"mapped",
[
109,
8725,
115,
50
]
],
[
[
13225,
13225
],
"mapped",
[
112,
97
]
],
[
[
13226,
13226
],
"mapped",
[
107,
112,
97
]
],
[
[
13227,
13227
],
"mapped",
[
109,
112,
97
]
],
[
[
13228,
13228
],
"mapped",
[
103,
112,
97
]
],
[
[
13229,
13229
],
"mapped",
[
114,
97,
100
]
],
[
[
13230,
13230
],
"mapped",
[
114,
97,
100,
8725,
115
]
],
[
[
13231,
13231
],
"mapped",
[
114,
97,
100,
8725,
115,
50
]
],
[
[
13232,
13232
],
"mapped",
[
112,
115
]
],
[
[
13233,
13233
],
"mapped",
[
110,
115
]
],
[
[
13234,
13234
],
"mapped",
[
956,
115
]
],
[
[
13235,
13235
],
"mapped",
[
109,
115
]
],
[
[
13236,
13236
],
"mapped",
[
112,
118
]
],
[
[
13237,
13237
],
"mapped",
[
110,
118
]
],
[
[
13238,
13238
],
"mapped",
[
956,
118
]
],
[
[
13239,
13239
],
"mapped",
[
109,
118
]
],
[
[
13240,
13240
],
"mapped",
[
107,
118
]
],
[
[
13241,
13241
],
"mapped",
[
109,
118
]
],
[
[
13242,
13242
],
"mapped",
[
112,
119
]
],
[
[
13243,
13243
],
"mapped",
[
110,
119
]
],
[
[
13244,
13244
],
"mapped",
[
956,
119
]
],
[
[
13245,
13245
],
"mapped",
[
109,
119
]
],
[
[
13246,
13246
],
"mapped",
[
107,
119
]
],
[
[
13247,
13247
],
"mapped",
[
109,
119
]
],
[
[
13248,
13248
],
"mapped",
[
107,
969
]
],
[
[
13249,
13249
],
"mapped",
[
109,
969
]
],
[
[
13250,
13250
],
"disallowed"
],
[
[
13251,
13251
],
"mapped",
[
98,
113
]
],
[
[
13252,
13252
],
"mapped",
[
99,
99
]
],
[
[
13253,
13253
],
"mapped",
[
99,
100
]
],
[
[
13254,
13254
],
"mapped",
[
99,
8725,
107,
103
]
],
[
[
13255,
13255
],
"disallowed"
],
[
[
13256,
13256
],
"mapped",
[
100,
98
]
],
[
[
13257,
13257
],
"mapped",
[
103,
121
]
],
[
[
13258,
13258
],
"mapped",
[
104,
97
]
],
[
[
13259,
13259
],
"mapped",
[
104,
112
]
],
[
[
13260,
13260
],
"mapped",
[
105,
110
]
],
[
[
13261,
13261
],
"mapped",
[
107,
107
]
],
[
[
13262,
13262
],
"mapped",
[
107,
109
]
],
[
[
13263,
13263
],
"mapped",
[
107,
116
]
],
[
[
13264,
13264
],
"mapped",
[
108,
109
]
],
[
[
13265,
13265
],
"mapped",
[
108,
110
]
],
[
[
13266,
13266
],
"mapped",
[
108,
111,
103
]
],
[
[
13267,
13267
],
"mapped",
[
108,
120
]
],
[
[
13268,
13268
],
"mapped",
[
109,
98
]
],
[
[
13269,
13269
],
"mapped",
[
109,
105,
108
]
],
[
[
13270,
13270
],
"mapped",
[
109,
111,
108
]
],
[
[
13271,
13271
],
"mapped",
[
112,
104
]
],
[
[
13272,
13272
],
"disallowed"
],
[
[
13273,
13273
],
"mapped",
[
112,
112,
109
]
],
[
[
13274,
13274
],
"mapped",
[
112,
114
]
],
[
[
13275,
13275
],
"mapped",
[
115,
114
]
],
[
[
13276,
13276
],
"mapped",
[
115,
118
]
],
[
[
13277,
13277
],
"mapped",
[
119,
98
]
],
[
[
13278,
13278
],
"mapped",
[
118,
8725,
109
]
],
[
[
13279,
13279
],
"mapped",
[
97,
8725,
109
]
],
[
[
13280,
13280
],
"mapped",
[
49,
26085
]
],
[
[
13281,
13281
],
"mapped",
[
50,
26085
]
],
[
[
13282,
13282
],
"mapped",
[
51,
26085
]
],
[
[
13283,
13283
],
"mapped",
[
52,
26085
]
],
[
[
13284,
13284
],
"mapped",
[
53,
26085
]
],
[
[
13285,
13285
],
"mapped",
[
54,
26085
]
],
[
[
13286,
13286
],
"mapped",
[
55,
26085
]
],
[
[
13287,
13287
],
"mapped",
[
56,
26085
]
],
[
[
13288,
13288
],
"mapped",
[
57,
26085
]
],
[
[
13289,
13289
],
"mapped",
[
49,
48,
26085
]
],
[
[
13290,
13290
],
"mapped",
[
49,
49,
26085
]
],
[
[
13291,
13291
],
"mapped",
[
49,
50,
26085
]
],
[
[
13292,
13292
],
"mapped",
[
49,
51,
26085
]
],
[
[
13293,
13293
],
"mapped",
[
49,
52,
26085
]
],
[
[
13294,
13294
],
"mapped",
[
49,
53,
26085
]
],
[
[
13295,
13295
],
"mapped",
[
49,
54,
26085
]
],
[
[
13296,
13296
],
"mapped",
[
49,
55,
26085
]
],
[
[
13297,
13297
],
"mapped",
[
49,
56,
26085
]
],
[
[
13298,
13298
],
"mapped",
[
49,
57,
26085
]
],
[
[
13299,
13299
],
"mapped",
[
50,
48,
26085
]
],
[
[
13300,
13300
],
"mapped",
[
50,
49,
26085
]
],
[
[
13301,
13301
],
"mapped",
[
50,
50,
26085
]
],
[
[
13302,
13302
],
"mapped",
[
50,
51,
26085
]
],
[
[
13303,
13303
],
"mapped",
[
50,
52,
26085
]
],
[
[
13304,
13304
],
"mapped",
[
50,
53,
26085
]
],
[
[
13305,
13305
],
"mapped",
[
50,
54,
26085
]
],
[
[
13306,
13306
],
"mapped",
[
50,
55,
26085
]
],
[
[
13307,
13307
],
"mapped",
[
50,
56,
26085
]
],
[
[
13308,
13308
],
"mapped",
[
50,
57,
26085
]
],
[
[
13309,
13309
],
"mapped",
[
51,
48,
26085
]
],
[
[
13310,
13310
],
"mapped",
[
51,
49,
26085
]
],
[
[
13311,
13311
],
"mapped",
[
103,
97,
108
]
],
[
[
13312,
19893
],
"valid"
],
[
[
19894,
19903
],
"disallowed"
],
[
[
19904,
19967
],
"valid",
[
],
"NV8"
],
[
[
19968,
40869
],
"valid"
],
[
[
40870,
40891
],
"valid"
],
[
[
40892,
40899
],
"valid"
],
[
[
40900,
40907
],
"valid"
],
[
[
40908,
40908
],
"valid"
],
[
[
40909,
40917
],
"valid"
],
[
[
40918,
40959
],
"disallowed"
],
[
[
40960,
42124
],
"valid"
],
[
[
42125,
42127
],
"disallowed"
],
[
[
42128,
42145
],
"valid",
[
],
"NV8"
],
[
[
42146,
42147
],
"valid",
[
],
"NV8"
],
[
[
42148,
42163
],
"valid",
[
],
"NV8"
],
[
[
42164,
42164
],
"valid",
[
],
"NV8"
],
[
[
42165,
42176
],
"valid",
[
],
"NV8"
],
[
[
42177,
42177
],
"valid",
[
],
"NV8"
],
[
[
42178,
42180
],
"valid",
[
],
"NV8"
],
[
[
42181,
42181
],
"valid",
[
],
"NV8"
],
[
[
42182,
42182
],
"valid",
[
],
"NV8"
],
[
[
42183,
42191
],
"disallowed"
],
[
[
42192,
42237
],
"valid"
],
[
[
42238,
42239
],
"valid",
[
],
"NV8"
],
[
[
42240,
42508
],
"valid"
],
[
[
42509,
42511
],
"valid",
[
],
"NV8"
],
[
[
42512,
42539
],
"valid"
],
[
[
42540,
42559
],
"disallowed"
],
[
[
42560,
42560
],
"mapped",
[
42561
]
],
[
[
42561,
42561
],
"valid"
],
[
[
42562,
42562
],
"mapped",
[
42563
]
],
[
[
42563,
42563
],
"valid"
],
[
[
42564,
42564
],
"mapped",
[
42565
]
],
[
[
42565,
42565
],
"valid"
],
[
[
42566,
42566
],
"mapped",
[
42567
]
],
[
[
42567,
42567
],
"valid"
],
[
[
42568,
42568
],
"mapped",
[
42569
]
],
[
[
42569,
42569
],
"valid"
],
[
[
42570,
42570
],
"mapped",
[
42571
]
],
[
[
42571,
42571
],
"valid"
],
[
[
42572,
42572
],
"mapped",
[
42573
]
],
[
[
42573,
42573
],
"valid"
],
[
[
42574,
42574
],
"mapped",
[
42575
]
],
[
[
42575,
42575
],
"valid"
],
[
[
42576,
42576
],
"mapped",
[
42577
]
],
[
[
42577,
42577
],
"valid"
],
[
[
42578,
42578
],
"mapped",
[
42579
]
],
[
[
42579,
42579
],
"valid"
],
[
[
42580,
42580
],
"mapped",
[
42581
]
],
[
[
42581,
42581
],
"valid"
],
[
[
42582,
42582
],
"mapped",
[
42583
]
],
[
[
42583,
42583
],
"valid"
],
[
[
42584,
42584
],
"mapped",
[
42585
]
],
[
[
42585,
42585
],
"valid"
],
[
[
42586,
42586
],
"mapped",
[
42587
]
],
[
[
42587,
42587
],
"valid"
],
[
[
42588,
42588
],
"mapped",
[
42589
]
],
[
[
42589,
42589
],
"valid"
],
[
[
42590,
42590
],
"mapped",
[
42591
]
],
[
[
42591,
42591
],
"valid"
],
[
[
42592,
42592
],
"mapped",
[
42593
]
],
[
[
42593,
42593
],
"valid"
],
[
[
42594,
42594
],
"mapped",
[
42595
]
],
[
[
42595,
42595
],
"valid"
],
[
[
42596,
42596
],
"mapped",
[
42597
]
],
[
[
42597,
42597
],
"valid"
],
[
[
42598,
42598
],
"mapped",
[
42599
]
],
[
[
42599,
42599
],
"valid"
],
[
[
42600,
42600
],
"mapped",
[
42601
]
],
[
[
42601,
42601
],
"valid"
],
[
[
42602,
42602
],
"mapped",
[
42603
]
],
[
[
42603,
42603
],
"valid"
],
[
[
42604,
42604
],
"mapped",
[
42605
]
],
[
[
42605,
42607
],
"valid"
],
[
[
42608,
42611
],
"valid",
[
],
"NV8"
],
[
[
42612,
42619
],
"valid"
],
[
[
42620,
42621
],
"valid"
],
[
[
42622,
42622
],
"valid",
[
],
"NV8"
],
[
[
42623,
42623
],
"valid"
],
[
[
42624,
42624
],
"mapped",
[
42625
]
],
[
[
42625,
42625
],
"valid"
],
[
[
42626,
42626
],
"mapped",
[
42627
]
],
[
[
42627,
42627
],
"valid"
],
[
[
42628,
42628
],
"mapped",
[
42629
]
],
[
[
42629,
42629
],
"valid"
],
[
[
42630,
42630
],
"mapped",
[
42631
]
],
[
[
42631,
42631
],
"valid"
],
[
[
42632,
42632
],
"mapped",
[
42633
]
],
[
[
42633,
42633
],
"valid"
],
[
[
42634,
42634
],
"mapped",
[
42635
]
],
[
[
42635,
42635
],
"valid"
],
[
[
42636,
42636
],
"mapped",
[
42637
]
],
[
[
42637,
42637
],
"valid"
],
[
[
42638,
42638
],
"mapped",
[
42639
]
],
[
[
42639,
42639
],
"valid"
],
[
[
42640,
42640
],
"mapped",
[
42641
]
],
[
[
42641,
42641
],
"valid"
],
[
[
42642,
42642
],
"mapped",
[
42643
]
],
[
[
42643,
42643
],
"valid"
],
[
[
42644,
42644
],
"mapped",
[
42645
]
],
[
[
42645,
42645
],
"valid"
],
[
[
42646,
42646
],
"mapped",
[
42647
]
],
[
[
42647,
42647
],
"valid"
],
[
[
42648,
42648
],
"mapped",
[
42649
]
],
[
[
42649,
42649
],
"valid"
],
[
[
42650,
42650
],
"mapped",
[
42651
]
],
[
[
42651,
42651
],
"valid"
],
[
[
42652,
42652
],
"mapped",
[
1098
]
],
[
[
42653,
42653
],
"mapped",
[
1100
]
],
[
[
42654,
42654
],
"valid"
],
[
[
42655,
42655
],
"valid"
],
[
[
42656,
42725
],
"valid"
],
[
[
42726,
42735
],
"valid",
[
],
"NV8"
],
[
[
42736,
42737
],
"valid"
],
[
[
42738,
42743
],
"valid",
[
],
"NV8"
],
[
[
42744,
42751
],
"disallowed"
],
[
[
42752,
42774
],
"valid",
[
],
"NV8"
],
[
[
42775,
42778
],
"valid"
],
[
[
42779,
42783
],
"valid"
],
[
[
42784,
42785
],
"valid",
[
],
"NV8"
],
[
[
42786,
42786
],
"mapped",
[
42787
]
],
[
[
42787,
42787
],
"valid"
],
[
[
42788,
42788
],
"mapped",
[
42789
]
],
[
[
42789,
42789
],
"valid"
],
[
[
42790,
42790
],
"mapped",
[
42791
]
],
[
[
42791,
42791
],
"valid"
],
[
[
42792,
42792
],
"mapped",
[
42793
]
],
[
[
42793,
42793
],
"valid"
],
[
[
42794,
42794
],
"mapped",
[
42795
]
],
[
[
42795,
42795
],
"valid"
],
[
[
42796,
42796
],
"mapped",
[
42797
]
],
[
[
42797,
42797
],
"valid"
],
[
[
42798,
42798
],
"mapped",
[
42799
]
],
[
[
42799,
42801
],
"valid"
],
[
[
42802,
42802
],
"mapped",
[
42803
]
],
[
[
42803,
42803
],
"valid"
],
[
[
42804,
42804
],
"mapped",
[
42805
]
],
[
[
42805,
42805
],
"valid"
],
[
[
42806,
42806
],
"mapped",
[
42807
]
],
[
[
42807,
42807
],
"valid"
],
[
[
42808,
42808
],
"mapped",
[
42809
]
],
[
[
42809,
42809
],
"valid"
],
[
[
42810,
42810
],
"mapped",
[
42811
]
],
[
[
42811,
42811
],
"valid"
],
[
[
42812,
42812
],
"mapped",
[
42813
]
],
[
[
42813,
42813
],
"valid"
],
[
[
42814,
42814
],
"mapped",
[
42815
]
],
[
[
42815,
42815
],
"valid"
],
[
[
42816,
42816
],
"mapped",
[
42817
]
],
[
[
42817,
42817
],
"valid"
],
[
[
42818,
42818
],
"mapped",
[
42819
]
],
[
[
42819,
42819
],
"valid"
],
[
[
42820,
42820
],
"mapped",
[
42821
]
],
[
[
42821,
42821
],
"valid"
],
[
[
42822,
42822
],
"mapped",
[
42823
]
],
[
[
42823,
42823
],
"valid"
],
[
[
42824,
42824
],
"mapped",
[
42825
]
],
[
[
42825,
42825
],
"valid"
],
[
[
42826,
42826
],
"mapped",
[
42827
]
],
[
[
42827,
42827
],
"valid"
],
[
[
42828,
42828
],
"mapped",
[
42829
]
],
[
[
42829,
42829
],
"valid"
],
[
[
42830,
42830
],
"mapped",
[
42831
]
],
[
[
42831,
42831
],
"valid"
],
[
[
42832,
42832
],
"mapped",
[
42833
]
],
[
[
42833,
42833
],
"valid"
],
[
[
42834,
42834
],
"mapped",
[
42835
]
],
[
[
42835,
42835
],
"valid"
],
[
[
42836,
42836
],
"mapped",
[
42837
]
],
[
[
42837,
42837
],
"valid"
],
[
[
42838,
42838
],
"mapped",
[
42839
]
],
[
[
42839,
42839
],
"valid"
],
[
[
42840,
42840
],
"mapped",
[
42841
]
],
[
[
42841,
42841
],
"valid"
],
[
[
42842,
42842
],
"mapped",
[
42843
]
],
[
[
42843,
42843
],
"valid"
],
[
[
42844,
42844
],
"mapped",
[
42845
]
],
[
[
42845,
42845
],
"valid"
],
[
[
42846,
42846
],
"mapped",
[
42847
]
],
[
[
42847,
42847
],
"valid"
],
[
[
42848,
42848
],
"mapped",
[
42849
]
],
[
[
42849,
42849
],
"valid"
],
[
[
42850,
42850
],
"mapped",
[
42851
]
],
[
[
42851,
42851
],
"valid"
],
[
[
42852,
42852
],
"mapped",
[
42853
]
],
[
[
42853,
42853
],
"valid"
],
[
[
42854,
42854
],
"mapped",
[
42855
]
],
[
[
42855,
42855
],
"valid"
],
[
[
42856,
42856
],
"mapped",
[
42857
]
],
[
[
42857,
42857
],
"valid"
],
[
[
42858,
42858
],
"mapped",
[
42859
]
],
[
[
42859,
42859
],
"valid"
],
[
[
42860,
42860
],
"mapped",
[
42861
]
],
[
[
42861,
42861
],
"valid"
],
[
[
42862,
42862
],
"mapped",
[
42863
]
],
[
[
42863,
42863
],
"valid"
],
[
[
42864,
42864
],
"mapped",
[
42863
]
],
[
[
42865,
42872
],
"valid"
],
[
[
42873,
42873
],
"mapped",
[
42874
]
],
[
[
42874,
42874
],
"valid"
],
[
[
42875,
42875
],
"mapped",
[
42876
]
],
[
[
42876,
42876
],
"valid"
],
[
[
42877,
42877
],
"mapped",
[
7545
]
],
[
[
42878,
42878
],
"mapped",
[
42879
]
],
[
[
42879,
42879
],
"valid"
],
[
[
42880,
42880
],
"mapped",
[
42881
]
],
[
[
42881,
42881
],
"valid"
],
[
[
42882,
42882
],
"mapped",
[
42883
]
],
[
[
42883,
42883
],
"valid"
],
[
[
42884,
42884
],
"mapped",
[
42885
]
],
[
[
42885,
42885
],
"valid"
],
[
[
42886,
42886
],
"mapped",
[
42887
]
],
[
[
42887,
42888
],
"valid"
],
[
[
42889,
42890
],
"valid",
[
],
"NV8"
],
[
[
42891,
42891
],
"mapped",
[
42892
]
],
[
[
42892,
42892
],
"valid"
],
[
[
42893,
42893
],
"mapped",
[
613
]
],
[
[
42894,
42894
],
"valid"
],
[
[
42895,
42895
],
"valid"
],
[
[
42896,
42896
],
"mapped",
[
42897
]
],
[
[
42897,
42897
],
"valid"
],
[
[
42898,
42898
],
"mapped",
[
42899
]
],
[
[
42899,
42899
],
"valid"
],
[
[
42900,
42901
],
"valid"
],
[
[
42902,
42902
],
"mapped",
[
42903
]
],
[
[
42903,
42903
],
"valid"
],
[
[
42904,
42904
],
"mapped",
[
42905
]
],
[
[
42905,
42905
],
"valid"
],
[
[
42906,
42906
],
"mapped",
[
42907
]
],
[
[
42907,
42907
],
"valid"
],
[
[
42908,
42908
],
"mapped",
[
42909
]
],
[
[
42909,
42909
],
"valid"
],
[
[
42910,
42910
],
"mapped",
[
42911
]
],
[
[
42911,
42911
],
"valid"
],
[
[
42912,
42912
],
"mapped",
[
42913
]
],
[
[
42913,
42913
],
"valid"
],
[
[
42914,
42914
],
"mapped",
[
42915
]
],
[
[
42915,
42915
],
"valid"
],
[
[
42916,
42916
],
"mapped",
[
42917
]
],
[
[
42917,
42917
],
"valid"
],
[
[
42918,
42918
],
"mapped",
[
42919
]
],
[
[
42919,
42919
],
"valid"
],
[
[
42920,
42920
],
"mapped",
[
42921
]
],
[
[
42921,
42921
],
"valid"
],
[
[
42922,
42922
],
"mapped",
[
614
]
],
[
[
42923,
42923
],
"mapped",
[
604
]
],
[
[
42924,
42924
],
"mapped",
[
609
]
],
[
[
42925,
42925
],
"mapped",
[
620
]
],
[
[
42926,
42927
],
"disallowed"
],
[
[
42928,
42928
],
"mapped",
[
670
]
],
[
[
42929,
42929
],
"mapped",
[
647
]
],
[
[
42930,
42930
],
"mapped",
[
669
]
],
[
[
42931,
42931
],
"mapped",
[
43859
]
],
[
[
42932,
42932
],
"mapped",
[
42933
]
],
[
[
42933,
42933
],
"valid"
],
[
[
42934,
42934
],
"mapped",
[
42935
]
],
[
[
42935,
42935
],
"valid"
],
[
[
42936,
42998
],
"disallowed"
],
[
[
42999,
42999
],
"valid"
],
[
[
43000,
43000
],
"mapped",
[
295
]
],
[
[
43001,
43001
],
"mapped",
[
339
]
],
[
[
43002,
43002
],
"valid"
],
[
[
43003,
43007
],
"valid"
],
[
[
43008,
43047
],
"valid"
],
[
[
43048,
43051
],
"valid",
[
],
"NV8"
],
[
[
43052,
43055
],
"disallowed"
],
[
[
43056,
43065
],
"valid",
[
],
"NV8"
],
[
[
43066,
43071
],
"disallowed"
],
[
[
43072,
43123
],
"valid"
],
[
[
43124,
43127
],
"valid",
[
],
"NV8"
],
[
[
43128,
43135
],
"disallowed"
],
[
[
43136,
43204
],
"valid"
],
[
[
43205,
43213
],
"disallowed"
],
[
[
43214,
43215
],
"valid",
[
],
"NV8"
],
[
[
43216,
43225
],
"valid"
],
[
[
43226,
43231
],
"disallowed"
],
[
[
43232,
43255
],
"valid"
],
[
[
43256,
43258
],
"valid",
[
],
"NV8"
],
[
[
43259,
43259
],
"valid"
],
[
[
43260,
43260
],
"valid",
[
],
"NV8"
],
[
[
43261,
43261
],
"valid"
],
[
[
43262,
43263
],
"disallowed"
],
[
[
43264,
43309
],
"valid"
],
[
[
43310,
43311
],
"valid",
[
],
"NV8"
],
[
[
43312,
43347
],
"valid"
],
[
[
43348,
43358
],
"disallowed"
],
[
[
43359,
43359
],
"valid",
[
],
"NV8"
],
[
[
43360,
43388
],
"valid",
[
],
"NV8"
],
[
[
43389,
43391
],
"disallowed"
],
[
[
43392,
43456
],
"valid"
],
[
[
43457,
43469
],
"valid",
[
],
"NV8"
],
[
[
43470,
43470
],
"disallowed"
],
[
[
43471,
43481
],
"valid"
],
[
[
43482,
43485
],
"disallowed"
],
[
[
43486,
43487
],
"valid",
[
],
"NV8"
],
[
[
43488,
43518
],
"valid"
],
[
[
43519,
43519
],
"disallowed"
],
[
[
43520,
43574
],
"valid"
],
[
[
43575,
43583
],
"disallowed"
],
[
[
43584,
43597
],
"valid"
],
[
[
43598,
43599
],
"disallowed"
],
[
[
43600,
43609
],
"valid"
],
[
[
43610,
43611
],
"disallowed"
],
[
[
43612,
43615
],
"valid",
[
],
"NV8"
],
[
[
43616,
43638
],
"valid"
],
[
[
43639,
43641
],
"valid",
[
],
"NV8"
],
[
[
43642,
43643
],
"valid"
],
[
[
43644,
43647
],
"valid"
],
[
[
43648,
43714
],
"valid"
],
[
[
43715,
43738
],
"disallowed"
],
[
[
43739,
43741
],
"valid"
],
[
[
43742,
43743
],
"valid",
[
],
"NV8"
],
[
[
43744,
43759
],
"valid"
],
[
[
43760,
43761
],
"valid",
[
],
"NV8"
],
[
[
43762,
43766
],
"valid"
],
[
[
43767,
43776
],
"disallowed"
],
[
[
43777,
43782
],
"valid"
],
[
[
43783,
43784
],
"disallowed"
],
[
[
43785,
43790
],
"valid"
],
[
[
43791,
43792
],
"disallowed"
],
[
[
43793,
43798
],
"valid"
],
[
[
43799,
43807
],
"disallowed"
],
[
[
43808,
43814
],
"valid"
],
[
[
43815,
43815
],
"disallowed"
],
[
[
43816,
43822
],
"valid"
],
[
[
43823,
43823
],
"disallowed"
],
[
[
43824,
43866
],
"valid"
],
[
[
43867,
43867
],
"valid",
[
],
"NV8"
],
[
[
43868,
43868
],
"mapped",
[
42791
]
],
[
[
43869,
43869
],
"mapped",
[
43831
]
],
[
[
43870,
43870
],
"mapped",
[
619
]
],
[
[
43871,
43871
],
"mapped",
[
43858
]
],
[
[
43872,
43875
],
"valid"
],
[
[
43876,
43877
],
"valid"
],
[
[
43878,
43887
],
"disallowed"
],
[
[
43888,
43888
],
"mapped",
[
5024
]
],
[
[
43889,
43889
],
"mapped",
[
5025
]
],
[
[
43890,
43890
],
"mapped",
[
5026
]
],
[
[
43891,
43891
],
"mapped",
[
5027
]
],
[
[
43892,
43892
],
"mapped",
[
5028
]
],
[
[
43893,
43893
],
"mapped",
[
5029
]
],
[
[
43894,
43894
],
"mapped",
[
5030
]
],
[
[
43895,
43895
],
"mapped",
[
5031
]
],
[
[
43896,
43896
],
"mapped",
[
5032
]
],
[
[
43897,
43897
],
"mapped",
[
5033
]
],
[
[
43898,
43898
],
"mapped",
[
5034
]
],
[
[
43899,
43899
],
"mapped",
[
5035
]
],
[
[
43900,
43900
],
"mapped",
[
5036
]
],
[
[
43901,
43901
],
"mapped",
[
5037
]
],
[
[
43902,
43902
],
"mapped",
[
5038
]
],
[
[
43903,
43903
],
"mapped",
[
5039
]
],
[
[
43904,
43904
],
"mapped",
[
5040
]
],
[
[
43905,
43905
],
"mapped",
[
5041
]
],
[
[
43906,
43906
],
"mapped",
[
5042
]
],
[
[
43907,
43907
],
"mapped",
[
5043
]
],
[
[
43908,
43908
],
"mapped",
[
5044
]
],
[
[
43909,
43909
],
"mapped",
[
5045
]
],
[
[
43910,
43910
],
"mapped",
[
5046
]
],
[
[
43911,
43911
],
"mapped",
[
5047
]
],
[
[
43912,
43912
],
"mapped",
[
5048
]
],
[
[
43913,
43913
],
"mapped",
[
5049
]
],
[
[
43914,
43914
],
"mapped",
[
5050
]
],
[
[
43915,
43915
],
"mapped",
[
5051
]
],
[
[
43916,
43916
],
"mapped",
[
5052
]
],
[
[
43917,
43917
],
"mapped",
[
5053
]
],
[
[
43918,
43918
],
"mapped",
[
5054
]
],
[
[
43919,
43919
],
"mapped",
[
5055
]
],
[
[
43920,
43920
],
"mapped",
[
5056
]
],
[
[
43921,
43921
],
"mapped",
[
5057
]
],
[
[
43922,
43922
],
"mapped",
[
5058
]
],
[
[
43923,
43923
],
"mapped",
[
5059
]
],
[
[
43924,
43924
],
"mapped",
[
5060
]
],
[
[
43925,
43925
],
"mapped",
[
5061
]
],
[
[
43926,
43926
],
"mapped",
[
5062
]
],
[
[
43927,
43927
],
"mapped",
[
5063
]
],
[
[
43928,
43928
],
"mapped",
[
5064
]
],
[
[
43929,
43929
],
"mapped",
[
5065
]
],
[
[
43930,
43930
],
"mapped",
[
5066
]
],
[
[
43931,
43931
],
"mapped",
[
5067
]
],
[
[
43932,
43932
],
"mapped",
[
5068
]
],
[
[
43933,
43933
],
"mapped",
[
5069
]
],
[
[
43934,
43934
],
"mapped",
[
5070
]
],
[
[
43935,
43935
],
"mapped",
[
5071
]
],
[
[
43936,
43936
],
"mapped",
[
5072
]
],
[
[
43937,
43937
],
"mapped",
[
5073
]
],
[
[
43938,
43938
],
"mapped",
[
5074
]
],
[
[
43939,
43939
],
"mapped",
[
5075
]
],
[
[
43940,
43940
],
"mapped",
[
5076
]
],
[
[
43941,
43941
],
"mapped",
[
5077
]
],
[
[
43942,
43942
],
"mapped",
[
5078
]
],
[
[
43943,
43943
],
"mapped",
[
5079
]
],
[
[
43944,
43944
],
"mapped",
[
5080
]
],
[
[
43945,
43945
],
"mapped",
[
5081
]
],
[
[
43946,
43946
],
"mapped",
[
5082
]
],
[
[
43947,
43947
],
"mapped",
[
5083
]
],
[
[
43948,
43948
],
"mapped",
[
5084
]
],
[
[
43949,
43949
],
"mapped",
[
5085
]
],
[
[
43950,
43950
],
"mapped",
[
5086
]
],
[
[
43951,
43951
],
"mapped",
[
5087
]
],
[
[
43952,
43952
],
"mapped",
[
5088
]
],
[
[
43953,
43953
],
"mapped",
[
5089
]
],
[
[
43954,
43954
],
"mapped",
[
5090
]
],
[
[
43955,
43955
],
"mapped",
[
5091
]
],
[
[
43956,
43956
],
"mapped",
[
5092
]
],
[
[
43957,
43957
],
"mapped",
[
5093
]
],
[
[
43958,
43958
],
"mapped",
[
5094
]
],
[
[
43959,
43959
],
"mapped",
[
5095
]
],
[
[
43960,
43960
],
"mapped",
[
5096
]
],
[
[
43961,
43961
],
"mapped",
[
5097
]
],
[
[
43962,
43962
],
"mapped",
[
5098
]
],
[
[
43963,
43963
],
"mapped",
[
5099
]
],
[
[
43964,
43964
],
"mapped",
[
5100
]
],
[
[
43965,
43965
],
"mapped",
[
5101
]
],
[
[
43966,
43966
],
"mapped",
[
5102
]
],
[
[
43967,
43967
],
"mapped",
[
5103
]
],
[
[
43968,
44010
],
"valid"
],
[
[
44011,
44011
],
"valid",
[
],
"NV8"
],
[
[
44012,
44013
],
"valid"
],
[
[
44014,
44015
],
"disallowed"
],
[
[
44016,
44025
],
"valid"
],
[
[
44026,
44031
],
"disallowed"
],
[
[
44032,
55203
],
"valid"
],
[
[
55204,
55215
],
"disallowed"
],
[
[
55216,
55238
],
"valid",
[
],
"NV8"
],
[
[
55239,
55242
],
"disallowed"
],
[
[
55243,
55291
],
"valid",
[
],
"NV8"
],
[
[
55292,
55295
],
"disallowed"
],
[
[
55296,
57343
],
"disallowed"
],
[
[
57344,
63743
],
"disallowed"
],
[
[
63744,
63744
],
"mapped",
[
35912
]
],
[
[
63745,
63745
],
"mapped",
[
26356
]
],
[
[
63746,
63746
],
"mapped",
[
36554
]
],
[
[
63747,
63747
],
"mapped",
[
36040
]
],
[
[
63748,
63748
],
"mapped",
[
28369
]
],
[
[
63749,
63749
],
"mapped",
[
20018
]
],
[
[
63750,
63750
],
"mapped",
[
21477
]
],
[
[
63751,
63752
],
"mapped",
[
40860
]
],
[
[
63753,
63753
],
"mapped",
[
22865
]
],
[
[
63754,
63754
],
"mapped",
[
37329
]
],
[
[
63755,
63755
],
"mapped",
[
21895
]
],
[
[
63756,
63756
],
"mapped",
[
22856
]
],
[
[
63757,
63757
],
"mapped",
[
25078
]
],
[
[
63758,
63758
],
"mapped",
[
30313
]
],
[
[
63759,
63759
],
"mapped",
[
32645
]
],
[
[
63760,
63760
],
"mapped",
[
34367
]
],
[
[
63761,
63761
],
"mapped",
[
34746
]
],
[
[
63762,
63762
],
"mapped",
[
35064
]
],
[
[
63763,
63763
],
"mapped",
[
37007
]
],
[
[
63764,
63764
],
"mapped",
[
27138
]
],
[
[
63765,
63765
],
"mapped",
[
27931
]
],
[
[
63766,
63766
],
"mapped",
[
28889
]
],
[
[
63767,
63767
],
"mapped",
[
29662
]
],
[
[
63768,
63768
],
"mapped",
[
33853
]
],
[
[
63769,
63769
],
"mapped",
[
37226
]
],
[
[
63770,
63770
],
"mapped",
[
39409
]
],
[
[
63771,
63771
],
"mapped",
[
20098
]
],
[
[
63772,
63772
],
"mapped",
[
21365
]
],
[
[
63773,
63773
],
"mapped",
[
27396
]
],
[
[
63774,
63774
],
"mapped",
[
29211
]
],
[
[
63775,
63775
],
"mapped",
[
34349
]
],
[
[
63776,
63776
],
"mapped",
[
40478
]
],
[
[
63777,
63777
],
"mapped",
[
23888
]
],
[
[
63778,
63778
],
"mapped",
[
28651
]
],
[
[
63779,
63779
],
"mapped",
[
34253
]
],
[
[
63780,
63780
],
"mapped",
[
35172
]
],
[
[
63781,
63781
],
"mapped",
[
25289
]
],
[
[
63782,
63782
],
"mapped",
[
33240
]
],
[
[
63783,
63783
],
"mapped",
[
34847
]
],
[
[
63784,
63784
],
"mapped",
[
24266
]
],
[
[
63785,
63785
],
"mapped",
[
26391
]
],
[
[
63786,
63786
],
"mapped",
[
28010
]
],
[
[
63787,
63787
],
"mapped",
[
29436
]
],
[
[
63788,
63788
],
"mapped",
[
37070
]
],
[
[
63789,
63789
],
"mapped",
[
20358
]
],
[
[
63790,
63790
],
"mapped",
[
20919
]
],
[
[
63791,
63791
],
"mapped",
[
21214
]
],
[
[
63792,
63792
],
"mapped",
[
25796
]
],
[
[
63793,
63793
],
"mapped",
[
27347
]
],
[
[
63794,
63794
],
"mapped",
[
29200
]
],
[
[
63795,
63795
],
"mapped",
[
30439
]
],
[
[
63796,
63796
],
"mapped",
[
32769
]
],
[
[
63797,
63797
],
"mapped",
[
34310
]
],
[
[
63798,
63798
],
"mapped",
[
34396
]
],
[
[
63799,
63799
],
"mapped",
[
36335
]
],
[
[
63800,
63800
],
"mapped",
[
38706
]
],
[
[
63801,
63801
],
"mapped",
[
39791
]
],
[
[
63802,
63802
],
"mapped",
[
40442
]
],
[
[
63803,
63803
],
"mapped",
[
30860
]
],
[
[
63804,
63804
],
"mapped",
[
31103
]
],
[
[
63805,
63805
],
"mapped",
[
32160
]
],
[
[
63806,
63806
],
"mapped",
[
33737
]
],
[
[
63807,
63807
],
"mapped",
[
37636
]
],
[
[
63808,
63808
],
"mapped",
[
40575
]
],
[
[
63809,
63809
],
"mapped",
[
35542
]
],
[
[
63810,
63810
],
"mapped",
[
22751
]
],
[
[
63811,
63811
],
"mapped",
[
24324
]
],
[
[
63812,
63812
],
"mapped",
[
31840
]
],
[
[
63813,
63813
],
"mapped",
[
32894
]
],
[
[
63814,
63814
],
"mapped",
[
29282
]
],
[
[
63815,
63815
],
"mapped",
[
30922
]
],
[
[
63816,
63816
],
"mapped",
[
36034
]
],
[
[
63817,
63817
],
"mapped",
[
38647
]
],
[
[
63818,
63818
],
"mapped",
[
22744
]
],
[
[
63819,
63819
],
"mapped",
[
23650
]
],
[
[
63820,
63820
],
"mapped",
[
27155
]
],
[
[
63821,
63821
],
"mapped",
[
28122
]
],
[
[
63822,
63822
],
"mapped",
[
28431
]
],
[
[
63823,
63823
],
"mapped",
[
32047
]
],
[
[
63824,
63824
],
"mapped",
[
32311
]
],
[
[
63825,
63825
],
"mapped",
[
38475
]
],
[
[
63826,
63826
],
"mapped",
[
21202
]
],
[
[
63827,
63827
],
"mapped",
[
32907
]
],
[
[
63828,
63828
],
"mapped",
[
20956
]
],
[
[
63829,
63829
],
"mapped",
[
20940
]
],
[
[
63830,
63830
],
"mapped",
[
31260
]
],
[
[
63831,
63831
],
"mapped",
[
32190
]
],
[
[
63832,
63832
],
"mapped",
[
33777
]
],
[
[
63833,
63833
],
"mapped",
[
38517
]
],
[
[
63834,
63834
],
"mapped",
[
35712
]
],
[
[
63835,
63835
],
"mapped",
[
25295
]
],
[
[
63836,
63836
],
"mapped",
[
27138
]
],
[
[
63837,
63837
],
"mapped",
[
35582
]
],
[
[
63838,
63838
],
"mapped",
[
20025
]
],
[
[
63839,
63839
],
"mapped",
[
23527
]
],
[
[
63840,
63840
],
"mapped",
[
24594
]
],
[
[
63841,
63841
],
"mapped",
[
29575
]
],
[
[
63842,
63842
],
"mapped",
[
30064
]
],
[
[
63843,
63843
],
"mapped",
[
21271
]
],
[
[
63844,
63844
],
"mapped",
[
30971
]
],
[
[
63845,
63845
],
"mapped",
[
20415
]
],
[
[
63846,
63846
],
"mapped",
[
24489
]
],
[
[
63847,
63847
],
"mapped",
[
19981
]
],
[
[
63848,
63848
],
"mapped",
[
27852
]
],
[
[
63849,
63849
],
"mapped",
[
25976
]
],
[
[
63850,
63850
],
"mapped",
[
32034
]
],
[
[
63851,
63851
],
"mapped",
[
21443
]
],
[
[
63852,
63852
],
"mapped",
[
22622
]
],
[
[
63853,
63853
],
"mapped",
[
30465
]
],
[
[
63854,
63854
],
"mapped",
[
33865
]
],
[
[
63855,
63855
],
"mapped",
[
35498
]
],
[
[
63856,
63856
],
"mapped",
[
27578
]
],
[
[
63857,
63857
],
"mapped",
[
36784
]
],
[
[
63858,
63858
],
"mapped",
[
27784
]
],
[
[
63859,
63859
],
"mapped",
[
25342
]
],
[
[
63860,
63860
],
"mapped",
[
33509
]
],
[
[
63861,
63861
],
"mapped",
[
25504
]
],
[
[
63862,
63862
],
"mapped",
[
30053
]
],
[
[
63863,
63863
],
"mapped",
[
20142
]
],
[
[
63864,
63864
],
"mapped",
[
20841
]
],
[
[
63865,
63865
],
"mapped",
[
20937
]
],
[
[
63866,
63866
],
"mapped",
[
26753
]
],
[
[
63867,
63867
],
"mapped",
[
31975
]
],
[
[
63868,
63868
],
"mapped",
[
33391
]
],
[
[
63869,
63869
],
"mapped",
[
35538
]
],
[
[
63870,
63870
],
"mapped",
[
37327
]
],
[
[
63871,
63871
],
"mapped",
[
21237
]
],
[
[
63872,
63872
],
"mapped",
[
21570
]
],
[
[
63873,
63873
],
"mapped",
[
22899
]
],
[
[
63874,
63874
],
"mapped",
[
24300
]
],
[
[
63875,
63875
],
"mapped",
[
26053
]
],
[
[
63876,
63876
],
"mapped",
[
28670
]
],
[
[
63877,
63877
],
"mapped",
[
31018
]
],
[
[
63878,
63878
],
"mapped",
[
38317
]
],
[
[
63879,
63879
],
"mapped",
[
39530
]
],
[
[
63880,
63880
],
"mapped",
[
40599
]
],
[
[
63881,
63881
],
"mapped",
[
40654
]
],
[
[
63882,
63882
],
"mapped",
[
21147
]
],
[
[
63883,
63883
],
"mapped",
[
26310
]
],
[
[
63884,
63884
],
"mapped",
[
27511
]
],
[
[
63885,
63885
],
"mapped",
[
36706
]
],
[
[
63886,
63886
],
"mapped",
[
24180
]
],
[
[
63887,
63887
],
"mapped",
[
24976
]
],
[
[
63888,
63888
],
"mapped",
[
25088
]
],
[
[
63889,
63889
],
"mapped",
[
25754
]
],
[
[
63890,
63890
],
"mapped",
[
28451
]
],
[
[
63891,
63891
],
"mapped",
[
29001
]
],
[
[
63892,
63892
],
"mapped",
[
29833
]
],
[
[
63893,
63893
],
"mapped",
[
31178
]
],
[
[
63894,
63894
],
"mapped",
[
32244
]
],
[
[
63895,
63895
],
"mapped",
[
32879
]
],
[
[
63896,
63896
],
"mapped",
[
36646
]
],
[
[
63897,
63897
],
"mapped",
[
34030
]
],
[
[
63898,
63898
],
"mapped",
[
36899
]
],
[
[
63899,
63899
],
"mapped",
[
37706
]
],
[
[
63900,
63900
],
"mapped",
[
21015
]
],
[
[
63901,
63901
],
"mapped",
[
21155
]
],
[
[
63902,
63902
],
"mapped",
[
21693
]
],
[
[
63903,
63903
],
"mapped",
[
28872
]
],
[
[
63904,
63904
],
"mapped",
[
35010
]
],
[
[
63905,
63905
],
"mapped",
[
35498
]
],
[
[
63906,
63906
],
"mapped",
[
24265
]
],
[
[
63907,
63907
],
"mapped",
[
24565
]
],
[
[
63908,
63908
],
"mapped",
[
25467
]
],
[
[
63909,
63909
],
"mapped",
[
27566
]
],
[
[
63910,
63910
],
"mapped",
[
31806
]
],
[
[
63911,
63911
],
"mapped",
[
29557
]
],
[
[
63912,
63912
],
"mapped",
[
20196
]
],
[
[
63913,
63913
],
"mapped",
[
22265
]
],
[
[
63914,
63914
],
"mapped",
[
23527
]
],
[
[
63915,
63915
],
"mapped",
[
23994
]
],
[
[
63916,
63916
],
"mapped",
[
24604
]
],
[
[
63917,
63917
],
"mapped",
[
29618
]
],
[
[
63918,
63918
],
"mapped",
[
29801
]
],
[
[
63919,
63919
],
"mapped",
[
32666
]
],
[
[
63920,
63920
],
"mapped",
[
32838
]
],
[
[
63921,
63921
],
"mapped",
[
37428
]
],
[
[
63922,
63922
],
"mapped",
[
38646
]
],
[
[
63923,
63923
],
"mapped",
[
38728
]
],
[
[
63924,
63924
],
"mapped",
[
38936
]
],
[
[
63925,
63925
],
"mapped",
[
20363
]
],
[
[
63926,
63926
],
"mapped",
[
31150
]
],
[
[
63927,
63927
],
"mapped",
[
37300
]
],
[
[
63928,
63928
],
"mapped",
[
38584
]
],
[
[
63929,
63929
],
"mapped",
[
24801
]
],
[
[
63930,
63930
],
"mapped",
[
20102
]
],
[
[
63931,
63931
],
"mapped",
[
20698
]
],
[
[
63932,
63932
],
"mapped",
[
23534
]
],
[
[
63933,
63933
],
"mapped",
[
23615
]
],
[
[
63934,
63934
],
"mapped",
[
26009
]
],
[
[
63935,
63935
],
"mapped",
[
27138
]
],
[
[
63936,
63936
],
"mapped",
[
29134
]
],
[
[
63937,
63937
],
"mapped",
[
30274
]
],
[
[
63938,
63938
],
"mapped",
[
34044
]
],
[
[
63939,
63939
],
"mapped",
[
36988
]
],
[
[
63940,
63940
],
"mapped",
[
40845
]
],
[
[
63941,
63941
],
"mapped",
[
26248
]
],
[
[
63942,
63942
],
"mapped",
[
38446
]
],
[
[
63943,
63943
],
"mapped",
[
21129
]
],
[
[
63944,
63944
],
"mapped",
[
26491
]
],
[
[
63945,
63945
],
"mapped",
[
26611
]
],
[
[
63946,
63946
],
"mapped",
[
27969
]
],
[
[
63947,
63947
],
"mapped",
[
28316
]
],
[
[
63948,
63948
],
"mapped",
[
29705
]
],
[
[
63949,
63949
],
"mapped",
[
30041
]
],
[
[
63950,
63950
],
"mapped",
[
30827
]
],
[
[
63951,
63951
],
"mapped",
[
32016
]
],
[
[
63952,
63952
],
"mapped",
[
39006
]
],
[
[
63953,
63953
],
"mapped",
[
20845
]
],
[
[
63954,
63954
],
"mapped",
[
25134
]
],
[
[
63955,
63955
],
"mapped",
[
38520
]
],
[
[
63956,
63956
],
"mapped",
[
20523
]
],
[
[
63957,
63957
],
"mapped",
[
23833
]
],
[
[
63958,
63958
],
"mapped",
[
28138
]
],
[
[
63959,
63959
],
"mapped",
[
36650
]
],
[
[
63960,
63960
],
"mapped",
[
24459
]
],
[
[
63961,
63961
],
"mapped",
[
24900
]
],
[
[
63962,
63962
],
"mapped",
[
26647
]
],
[
[
63963,
63963
],
"mapped",
[
29575
]
],
[
[
63964,
63964
],
"mapped",
[
38534
]
],
[
[
63965,
63965
],
"mapped",
[
21033
]
],
[
[
63966,
63966
],
"mapped",
[
21519
]
],
[
[
63967,
63967
],
"mapped",
[
23653
]
],
[
[
63968,
63968
],
"mapped",
[
26131
]
],
[
[
63969,
63969
],
"mapped",
[
26446
]
],
[
[
63970,
63970
],
"mapped",
[
26792
]
],
[
[
63971,
63971
],
"mapped",
[
27877
]
],
[
[
63972,
63972
],
"mapped",
[
29702
]
],
[
[
63973,
63973
],
"mapped",
[
30178
]
],
[
[
63974,
63974
],
"mapped",
[
32633
]
],
[
[
63975,
63975
],
"mapped",
[
35023
]
],
[
[
63976,
63976
],
"mapped",
[
35041
]
],
[
[
63977,
63977
],
"mapped",
[
37324
]
],
[
[
63978,
63978
],
"mapped",
[
38626
]
],
[
[
63979,
63979
],
"mapped",
[
21311
]
],
[
[
63980,
63980
],
"mapped",
[
28346
]
],
[
[
63981,
63981
],
"mapped",
[
21533
]
],
[
[
63982,
63982
],
"mapped",
[
29136
]
],
[
[
63983,
63983
],
"mapped",
[
29848
]
],
[
[
63984,
63984
],
"mapped",
[
34298
]
],
[
[
63985,
63985
],
"mapped",
[
38563
]
],
[
[
63986,
63986
],
"mapped",
[
40023
]
],
[
[
63987,
63987
],
"mapped",
[
40607
]
],
[
[
63988,
63988
],
"mapped",
[
26519
]
],
[
[
63989,
63989
],
"mapped",
[
28107
]
],
[
[
63990,
63990
],
"mapped",
[
33256
]
],
[
[
63991,
63991
],
"mapped",
[
31435
]
],
[
[
63992,
63992
],
"mapped",
[
31520
]
],
[
[
63993,
63993
],
"mapped",
[
31890
]
],
[
[
63994,
63994
],
"mapped",
[
29376
]
],
[
[
63995,
63995
],
"mapped",
[
28825
]
],
[
[
63996,
63996
],
"mapped",
[
35672
]
],
[
[
63997,
63997
],
"mapped",
[
20160
]
],
[
[
63998,
63998
],
"mapped",
[
33590
]
],
[
[
63999,
63999
],
"mapped",
[
21050
]
],
[
[
64000,
64000
],
"mapped",
[
20999
]
],
[
[
64001,
64001
],
"mapped",
[
24230
]
],
[
[
64002,
64002
],
"mapped",
[
25299
]
],
[
[
64003,
64003
],
"mapped",
[
31958
]
],
[
[
64004,
64004
],
"mapped",
[
23429
]
],
[
[
64005,
64005
],
"mapped",
[
27934
]
],
[
[
64006,
64006
],
"mapped",
[
26292
]
],
[
[
64007,
64007
],
"mapped",
[
36667
]
],
[
[
64008,
64008
],
"mapped",
[
34892
]
],
[
[
64009,
64009
],
"mapped",
[
38477
]
],
[
[
64010,
64010
],
"mapped",
[
35211
]
],
[
[
64011,
64011
],
"mapped",
[
24275
]
],
[
[
64012,
64012
],
"mapped",
[
20800
]
],
[
[
64013,
64013
],
"mapped",
[
21952
]
],
[
[
64014,
64015
],
"valid"
],
[
[
64016,
64016
],
"mapped",
[
22618
]
],
[
[
64017,
64017
],
"valid"
],
[
[
64018,
64018
],
"mapped",
[
26228
]
],
[
[
64019,
64020
],
"valid"
],
[
[
64021,
64021
],
"mapped",
[
20958
]
],
[
[
64022,
64022
],
"mapped",
[
29482
]
],
[
[
64023,
64023
],
"mapped",
[
30410
]
],
[
[
64024,
64024
],
"mapped",
[
31036
]
],
[
[
64025,
64025
],
"mapped",
[
31070
]
],
[
[
64026,
64026
],
"mapped",
[
31077
]
],
[
[
64027,
64027
],
"mapped",
[
31119
]
],
[
[
64028,
64028
],
"mapped",
[
38742
]
],
[
[
64029,
64029
],
"mapped",
[
31934
]
],
[
[
64030,
64030
],
"mapped",
[
32701
]
],
[
[
64031,
64031
],
"valid"
],
[
[
64032,
64032
],
"mapped",
[
34322
]
],
[
[
64033,
64033
],
"valid"
],
[
[
64034,
64034
],
"mapped",
[
35576
]
],
[
[
64035,
64036
],
"valid"
],
[
[
64037,
64037
],
"mapped",
[
36920
]
],
[
[
64038,
64038
],
"mapped",
[
37117
]
],
[
[
64039,
64041
],
"valid"
],
[
[
64042,
64042
],
"mapped",
[
39151
]
],
[
[
64043,
64043
],
"mapped",
[
39164
]
],
[
[
64044,
64044
],
"mapped",
[
39208
]
],
[
[
64045,
64045
],
"mapped",
[
40372
]
],
[
[
64046,
64046
],
"mapped",
[
37086
]
],
[
[
64047,
64047
],
"mapped",
[
38583
]
],
[
[
64048,
64048
],
"mapped",
[
20398
]
],
[
[
64049,
64049
],
"mapped",
[
20711
]
],
[
[
64050,
64050
],
"mapped",
[
20813
]
],
[
[
64051,
64051
],
"mapped",
[
21193
]
],
[
[
64052,
64052
],
"mapped",
[
21220
]
],
[
[
64053,
64053
],
"mapped",
[
21329
]
],
[
[
64054,
64054
],
"mapped",
[
21917
]
],
[
[
64055,
64055
],
"mapped",
[
22022
]
],
[
[
64056,
64056
],
"mapped",
[
22120
]
],
[
[
64057,
64057
],
"mapped",
[
22592
]
],
[
[
64058,
64058
],
"mapped",
[
22696
]
],
[
[
64059,
64059
],
"mapped",
[
23652
]
],
[
[
64060,
64060
],
"mapped",
[
23662
]
],
[
[
64061,
64061
],
"mapped",
[
24724
]
],
[
[
64062,
64062
],
"mapped",
[
24936
]
],
[
[
64063,
64063
],
"mapped",
[
24974
]
],
[
[
64064,
64064
],
"mapped",
[
25074
]
],
[
[
64065,
64065
],
"mapped",
[
25935
]
],
[
[
64066,
64066
],
"mapped",
[
26082
]
],
[
[
64067,
64067
],
"mapped",
[
26257
]
],
[
[
64068,
64068
],
"mapped",
[
26757
]
],
[
[
64069,
64069
],
"mapped",
[
28023
]
],
[
[
64070,
64070
],
"mapped",
[
28186
]
],
[
[
64071,
64071
],
"mapped",
[
28450
]
],
[
[
64072,
64072
],
"mapped",
[
29038
]
],
[
[
64073,
64073
],
"mapped",
[
29227
]
],
[
[
64074,
64074
],
"mapped",
[
29730
]
],
[
[
64075,
64075
],
"mapped",
[
30865
]
],
[
[
64076,
64076
],
"mapped",
[
31038
]
],
[
[
64077,
64077
],
"mapped",
[
31049
]
],
[
[
64078,
64078
],
"mapped",
[
31048
]
],
[
[
64079,
64079
],
"mapped",
[
31056
]
],
[
[
64080,
64080
],
"mapped",
[
31062
]
],
[
[
64081,
64081
],
"mapped",
[
31069
]
],
[
[
64082,
64082
],
"mapped",
[
31117
]
],
[
[
64083,
64083
],
"mapped",
[
31118
]
],
[
[
64084,
64084
],
"mapped",
[
31296
]
],
[
[
64085,
64085
],
"mapped",
[
31361
]
],
[
[
64086,
64086
],
"mapped",
[
31680
]
],
[
[
64087,
64087
],
"mapped",
[
32244
]
],
[
[
64088,
64088
],
"mapped",
[
32265
]
],
[
[
64089,
64089
],
"mapped",
[
32321
]
],
[
[
64090,
64090
],
"mapped",
[
32626
]
],
[
[
64091,
64091
],
"mapped",
[
32773
]
],
[
[
64092,
64092
],
"mapped",
[
33261
]
],
[
[
64093,
64094
],
"mapped",
[
33401
]
],
[
[
64095,
64095
],
"mapped",
[
33879
]
],
[
[
64096,
64096
],
"mapped",
[
35088
]
],
[
[
64097,
64097
],
"mapped",
[
35222
]
],
[
[
64098,
64098
],
"mapped",
[
35585
]
],
[
[
64099,
64099
],
"mapped",
[
35641
]
],
[
[
64100,
64100
],
"mapped",
[
36051
]
],
[
[
64101,
64101
],
"mapped",
[
36104
]
],
[
[
64102,
64102
],
"mapped",
[
36790
]
],
[
[
64103,
64103
],
"mapped",
[
36920
]
],
[
[
64104,
64104
],
"mapped",
[
38627
]
],
[
[
64105,
64105
],
"mapped",
[
38911
]
],
[
[
64106,
64106
],
"mapped",
[
38971
]
],
[
[
64107,
64107
],
"mapped",
[
24693
]
],
[
[
64108,
64108
],
"mapped",
[
148206
]
],
[
[
64109,
64109
],
"mapped",
[
33304
]
],
[
[
64110,
64111
],
"disallowed"
],
[
[
64112,
64112
],
"mapped",
[
20006
]
],
[
[
64113,
64113
],
"mapped",
[
20917
]
],
[
[
64114,
64114
],
"mapped",
[
20840
]
],
[
[
64115,
64115
],
"mapped",
[
20352
]
],
[
[
64116,
64116
],
"mapped",
[
20805
]
],
[
[
64117,
64117
],
"mapped",
[
20864
]
],
[
[
64118,
64118
],
"mapped",
[
21191
]
],
[
[
64119,
64119
],
"mapped",
[
21242
]
],
[
[
64120,
64120
],
"mapped",
[
21917
]
],
[
[
64121,
64121
],
"mapped",
[
21845
]
],
[
[
64122,
64122
],
"mapped",
[
21913
]
],
[
[
64123,
64123
],
"mapped",
[
21986
]
],
[
[
64124,
64124
],
"mapped",
[
22618
]
],
[
[
64125,
64125
],
"mapped",
[
22707
]
],
[
[
64126,
64126
],
"mapped",
[
22852
]
],
[
[
64127,
64127
],
"mapped",
[
22868
]
],
[
[
64128,
64128
],
"mapped",
[
23138
]
],
[
[
64129,
64129
],
"mapped",
[
23336
]
],
[
[
64130,
64130
],
"mapped",
[
24274
]
],
[
[
64131,
64131
],
"mapped",
[
24281
]
],
[
[
64132,
64132
],
"mapped",
[
24425
]
],
[
[
64133,
64133
],
"mapped",
[
24493
]
],
[
[
64134,
64134
],
"mapped",
[
24792
]
],
[
[
64135,
64135
],
"mapped",
[
24910
]
],
[
[
64136,
64136
],
"mapped",
[
24840
]
],
[
[
64137,
64137
],
"mapped",
[
24974
]
],
[
[
64138,
64138
],
"mapped",
[
24928
]
],
[
[
64139,
64139
],
"mapped",
[
25074
]
],
[
[
64140,
64140
],
"mapped",
[
25140
]
],
[
[
64141,
64141
],
"mapped",
[
25540
]
],
[
[
64142,
64142
],
"mapped",
[
25628
]
],
[
[
64143,
64143
],
"mapped",
[
25682
]
],
[
[
64144,
64144
],
"mapped",
[
25942
]
],
[
[
64145,
64145
],
"mapped",
[
26228
]
],
[
[
64146,
64146
],
"mapped",
[
26391
]
],
[
[
64147,
64147
],
"mapped",
[
26395
]
],
[
[
64148,
64148
],
"mapped",
[
26454
]
],
[
[
64149,
64149
],
"mapped",
[
27513
]
],
[
[
64150,
64150
],
"mapped",
[
27578
]
],
[
[
64151,
64151
],
"mapped",
[
27969
]
],
[
[
64152,
64152
],
"mapped",
[
28379
]
],
[
[
64153,
64153
],
"mapped",
[
28363
]
],
[
[
64154,
64154
],
"mapped",
[
28450
]
],
[
[
64155,
64155
],
"mapped",
[
28702
]
],
[
[
64156,
64156
],
"mapped",
[
29038
]
],
[
[
64157,
64157
],
"mapped",
[
30631
]
],
[
[
64158,
64158
],
"mapped",
[
29237
]
],
[
[
64159,
64159
],
"mapped",
[
29359
]
],
[
[
64160,
64160
],
"mapped",
[
29482
]
],
[
[
64161,
64161
],
"mapped",
[
29809
]
],
[
[
64162,
64162
],
"mapped",
[
29958
]
],
[
[
64163,
64163
],
"mapped",
[
30011
]
],
[
[
64164,
64164
],
"mapped",
[
30237
]
],
[
[
64165,
64165
],
"mapped",
[
30239
]
],
[
[
64166,
64166
],
"mapped",
[
30410
]
],
[
[
64167,
64167
],
"mapped",
[
30427
]
],
[
[
64168,
64168
],
"mapped",
[
30452
]
],
[
[
64169,
64169
],
"mapped",
[
30538
]
],
[
[
64170,
64170
],
"mapped",
[
30528
]
],
[
[
64171,
64171
],
"mapped",
[
30924
]
],
[
[
64172,
64172
],
"mapped",
[
31409
]
],
[
[
64173,
64173
],
"mapped",
[
31680
]
],
[
[
64174,
64174
],
"mapped",
[
31867
]
],
[
[
64175,
64175
],
"mapped",
[
32091
]
],
[
[
64176,
64176
],
"mapped",
[
32244
]
],
[
[
64177,
64177
],
"mapped",
[
32574
]
],
[
[
64178,
64178
],
"mapped",
[
32773
]
],
[
[
64179,
64179
],
"mapped",
[
33618
]
],
[
[
64180,
64180
],
"mapped",
[
33775
]
],
[
[
64181,
64181
],
"mapped",
[
34681
]
],
[
[
64182,
64182
],
"mapped",
[
35137
]
],
[
[
64183,
64183
],
"mapped",
[
35206
]
],
[
[
64184,
64184
],
"mapped",
[
35222
]
],
[
[
64185,
64185
],
"mapped",
[
35519
]
],
[
[
64186,
64186
],
"mapped",
[
35576
]
],
[
[
64187,
64187
],
"mapped",
[
35531
]
],
[
[
64188,
64188
],
"mapped",
[
35585
]
],
[
[
64189,
64189
],
"mapped",
[
35582
]
],
[
[
64190,
64190
],
"mapped",
[
35565
]
],
[
[
64191,
64191
],
"mapped",
[
35641
]
],
[
[
64192,
64192
],
"mapped",
[
35722
]
],
[
[
64193,
64193
],
"mapped",
[
36104
]
],
[
[
64194,
64194
],
"mapped",
[
36664
]
],
[
[
64195,
64195
],
"mapped",
[
36978
]
],
[
[
64196,
64196
],
"mapped",
[
37273
]
],
[
[
64197,
64197
],
"mapped",
[
37494
]
],
[
[
64198,
64198
],
"mapped",
[
38524
]
],
[
[
64199,
64199
],
"mapped",
[
38627
]
],
[
[
64200,
64200
],
"mapped",
[
38742
]
],
[
[
64201,
64201
],
"mapped",
[
38875
]
],
[
[
64202,
64202
],
"mapped",
[
38911
]
],
[
[
64203,
64203
],
"mapped",
[
38923
]
],
[
[
64204,
64204
],
"mapped",
[
38971
]
],
[
[
64205,
64205
],
"mapped",
[
39698
]
],
[
[
64206,
64206
],
"mapped",
[
40860
]
],
[
[
64207,
64207
],
"mapped",
[
141386
]
],
[
[
64208,
64208
],
"mapped",
[
141380
]
],
[
[
64209,
64209
],
"mapped",
[
144341
]
],
[
[
64210,
64210
],
"mapped",
[
15261
]
],
[
[
64211,
64211
],
"mapped",
[
16408
]
],
[
[
64212,
64212
],
"mapped",
[
16441
]
],
[
[
64213,
64213
],
"mapped",
[
152137
]
],
[
[
64214,
64214
],
"mapped",
[
154832
]
],
[
[
64215,
64215
],
"mapped",
[
163539
]
],
[
[
64216,
64216
],
"mapped",
[
40771
]
],
[
[
64217,
64217
],
"mapped",
[
40846
]
],
[
[
64218,
64255
],
"disallowed"
],
[
[
64256,
64256
],
"mapped",
[
102,
102
]
],
[
[
64257,
64257
],
"mapped",
[
102,
105
]
],
[
[
64258,
64258
],
"mapped",
[
102,
108
]
],
[
[
64259,
64259
],
"mapped",
[
102,
102,
105
]
],
[
[
64260,
64260
],
"mapped",
[
102,
102,
108
]
],
[
[
64261,
64262
],
"mapped",
[
115,
116
]
],
[
[
64263,
64274
],
"disallowed"
],
[
[
64275,
64275
],
"mapped",
[
1396,
1398
]
],
[
[
64276,
64276
],
"mapped",
[
1396,
1381
]
],
[
[
64277,
64277
],
"mapped",
[
1396,
1387
]
],
[
[
64278,
64278
],
"mapped",
[
1406,
1398
]
],
[
[
64279,
64279
],
"mapped",
[
1396,
1389
]
],
[
[
64280,
64284
],
"disallowed"
],
[
[
64285,
64285
],
"mapped",
[
1497,
1460
]
],
[
[
64286,
64286
],
"valid"
],
[
[
64287,
64287
],
"mapped",
[
1522,
1463
]
],
[
[
64288,
64288
],
"mapped",
[
1506
]
],
[
[
64289,
64289
],
"mapped",
[
1488
]
],
[
[
64290,
64290
],
"mapped",
[
1491
]
],
[
[
64291,
64291
],
"mapped",
[
1492
]
],
[
[
64292,
64292
],
"mapped",
[
1499
]
],
[
[
64293,
64293
],
"mapped",
[
1500
]
],
[
[
64294,
64294
],
"mapped",
[
1501
]
],
[
[
64295,
64295
],
"mapped",
[
1512
]
],
[
[
64296,
64296
],
"mapped",
[
1514
]
],
[
[
64297,
64297
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
64298,
64298
],
"mapped",
[
1513,
1473
]
],
[
[
64299,
64299
],
"mapped",
[
1513,
1474
]
],
[
[
64300,
64300
],
"mapped",
[
1513,
1468,
1473
]
],
[
[
64301,
64301
],
"mapped",
[
1513,
1468,
1474
]
],
[
[
64302,
64302
],
"mapped",
[
1488,
1463
]
],
[
[
64303,
64303
],
"mapped",
[
1488,
1464
]
],
[
[
64304,
64304
],
"mapped",
[
1488,
1468
]
],
[
[
64305,
64305
],
"mapped",
[
1489,
1468
]
],
[
[
64306,
64306
],
"mapped",
[
1490,
1468
]
],
[
[
64307,
64307
],
"mapped",
[
1491,
1468
]
],
[
[
64308,
64308
],
"mapped",
[
1492,
1468
]
],
[
[
64309,
64309
],
"mapped",
[
1493,
1468
]
],
[
[
64310,
64310
],
"mapped",
[
1494,
1468
]
],
[
[
64311,
64311
],
"disallowed"
],
[
[
64312,
64312
],
"mapped",
[
1496,
1468
]
],
[
[
64313,
64313
],
"mapped",
[
1497,
1468
]
],
[
[
64314,
64314
],
"mapped",
[
1498,
1468
]
],
[
[
64315,
64315
],
"mapped",
[
1499,
1468
]
],
[
[
64316,
64316
],
"mapped",
[
1500,
1468
]
],
[
[
64317,
64317
],
"disallowed"
],
[
[
64318,
64318
],
"mapped",
[
1502,
1468
]
],
[
[
64319,
64319
],
"disallowed"
],
[
[
64320,
64320
],
"mapped",
[
1504,
1468
]
],
[
[
64321,
64321
],
"mapped",
[
1505,
1468
]
],
[
[
64322,
64322
],
"disallowed"
],
[
[
64323,
64323
],
"mapped",
[
1507,
1468
]
],
[
[
64324,
64324
],
"mapped",
[
1508,
1468
]
],
[
[
64325,
64325
],
"disallowed"
],
[
[
64326,
64326
],
"mapped",
[
1510,
1468
]
],
[
[
64327,
64327
],
"mapped",
[
1511,
1468
]
],
[
[
64328,
64328
],
"mapped",
[
1512,
1468
]
],
[
[
64329,
64329
],
"mapped",
[
1513,
1468
]
],
[
[
64330,
64330
],
"mapped",
[
1514,
1468
]
],
[
[
64331,
64331
],
"mapped",
[
1493,
1465
]
],
[
[
64332,
64332
],
"mapped",
[
1489,
1471
]
],
[
[
64333,
64333
],
"mapped",
[
1499,
1471
]
],
[
[
64334,
64334
],
"mapped",
[
1508,
1471
]
],
[
[
64335,
64335
],
"mapped",
[
1488,
1500
]
],
[
[
64336,
64337
],
"mapped",
[
1649
]
],
[
[
64338,
64341
],
"mapped",
[
1659
]
],
[
[
64342,
64345
],
"mapped",
[
1662
]
],
[
[
64346,
64349
],
"mapped",
[
1664
]
],
[
[
64350,
64353
],
"mapped",
[
1658
]
],
[
[
64354,
64357
],
"mapped",
[
1663
]
],
[
[
64358,
64361
],
"mapped",
[
1657
]
],
[
[
64362,
64365
],
"mapped",
[
1700
]
],
[
[
64366,
64369
],
"mapped",
[
1702
]
],
[
[
64370,
64373
],
"mapped",
[
1668
]
],
[
[
64374,
64377
],
"mapped",
[
1667
]
],
[
[
64378,
64381
],
"mapped",
[
1670
]
],
[
[
64382,
64385
],
"mapped",
[
1671
]
],
[
[
64386,
64387
],
"mapped",
[
1677
]
],
[
[
64388,
64389
],
"mapped",
[
1676
]
],
[
[
64390,
64391
],
"mapped",
[
1678
]
],
[
[
64392,
64393
],
"mapped",
[
1672
]
],
[
[
64394,
64395
],
"mapped",
[
1688
]
],
[
[
64396,
64397
],
"mapped",
[
1681
]
],
[
[
64398,
64401
],
"mapped",
[
1705
]
],
[
[
64402,
64405
],
"mapped",
[
1711
]
],
[
[
64406,
64409
],
"mapped",
[
1715
]
],
[
[
64410,
64413
],
"mapped",
[
1713
]
],
[
[
64414,
64415
],
"mapped",
[
1722
]
],
[
[
64416,
64419
],
"mapped",
[
1723
]
],
[
[
64420,
64421
],
"mapped",
[
1728
]
],
[
[
64422,
64425
],
"mapped",
[
1729
]
],
[
[
64426,
64429
],
"mapped",
[
1726
]
],
[
[
64430,
64431
],
"mapped",
[
1746
]
],
[
[
64432,
64433
],
"mapped",
[
1747
]
],
[
[
64434,
64449
],
"valid",
[
],
"NV8"
],
[
[
64450,
64466
],
"disallowed"
],
[
[
64467,
64470
],
"mapped",
[
1709
]
],
[
[
64471,
64472
],
"mapped",
[
1735
]
],
[
[
64473,
64474
],
"mapped",
[
1734
]
],
[
[
64475,
64476
],
"mapped",
[
1736
]
],
[
[
64477,
64477
],
"mapped",
[
1735,
1652
]
],
[
[
64478,
64479
],
"mapped",
[
1739
]
],
[
[
64480,
64481
],
"mapped",
[
1733
]
],
[
[
64482,
64483
],
"mapped",
[
1737
]
],
[
[
64484,
64487
],
"mapped",
[
1744
]
],
[
[
64488,
64489
],
"mapped",
[
1609
]
],
[
[
64490,
64491
],
"mapped",
[
1574,
1575
]
],
[
[
64492,
64493
],
"mapped",
[
1574,
1749
]
],
[
[
64494,
64495
],
"mapped",
[
1574,
1608
]
],
[
[
64496,
64497
],
"mapped",
[
1574,
1735
]
],
[
[
64498,
64499
],
"mapped",
[
1574,
1734
]
],
[
[
64500,
64501
],
"mapped",
[
1574,
1736
]
],
[
[
64502,
64504
],
"mapped",
[
1574,
1744
]
],
[
[
64505,
64507
],
"mapped",
[
1574,
1609
]
],
[
[
64508,
64511
],
"mapped",
[
1740
]
],
[
[
64512,
64512
],
"mapped",
[
1574,
1580
]
],
[
[
64513,
64513
],
"mapped",
[
1574,
1581
]
],
[
[
64514,
64514
],
"mapped",
[
1574,
1605
]
],
[
[
64515,
64515
],
"mapped",
[
1574,
1609
]
],
[
[
64516,
64516
],
"mapped",
[
1574,
1610
]
],
[
[
64517,
64517
],
"mapped",
[
1576,
1580
]
],
[
[
64518,
64518
],
"mapped",
[
1576,
1581
]
],
[
[
64519,
64519
],
"mapped",
[
1576,
1582
]
],
[
[
64520,
64520
],
"mapped",
[
1576,
1605
]
],
[
[
64521,
64521
],
"mapped",
[
1576,
1609
]
],
[
[
64522,
64522
],
"mapped",
[
1576,
1610
]
],
[
[
64523,
64523
],
"mapped",
[
1578,
1580
]
],
[
[
64524,
64524
],
"mapped",
[
1578,
1581
]
],
[
[
64525,
64525
],
"mapped",
[
1578,
1582
]
],
[
[
64526,
64526
],
"mapped",
[
1578,
1605
]
],
[
[
64527,
64527
],
"mapped",
[
1578,
1609
]
],
[
[
64528,
64528
],
"mapped",
[
1578,
1610
]
],
[
[
64529,
64529
],
"mapped",
[
1579,
1580
]
],
[
[
64530,
64530
],
"mapped",
[
1579,
1605
]
],
[
[
64531,
64531
],
"mapped",
[
1579,
1609
]
],
[
[
64532,
64532
],
"mapped",
[
1579,
1610
]
],
[
[
64533,
64533
],
"mapped",
[
1580,
1581
]
],
[
[
64534,
64534
],
"mapped",
[
1580,
1605
]
],
[
[
64535,
64535
],
"mapped",
[
1581,
1580
]
],
[
[
64536,
64536
],
"mapped",
[
1581,
1605
]
],
[
[
64537,
64537
],
"mapped",
[
1582,
1580
]
],
[
[
64538,
64538
],
"mapped",
[
1582,
1581
]
],
[
[
64539,
64539
],
"mapped",
[
1582,
1605
]
],
[
[
64540,
64540
],
"mapped",
[
1587,
1580
]
],
[
[
64541,
64541
],
"mapped",
[
1587,
1581
]
],
[
[
64542,
64542
],
"mapped",
[
1587,
1582
]
],
[
[
64543,
64543
],
"mapped",
[
1587,
1605
]
],
[
[
64544,
64544
],
"mapped",
[
1589,
1581
]
],
[
[
64545,
64545
],
"mapped",
[
1589,
1605
]
],
[
[
64546,
64546
],
"mapped",
[
1590,
1580
]
],
[
[
64547,
64547
],
"mapped",
[
1590,
1581
]
],
[
[
64548,
64548
],
"mapped",
[
1590,
1582
]
],
[
[
64549,
64549
],
"mapped",
[
1590,
1605
]
],
[
[
64550,
64550
],
"mapped",
[
1591,
1581
]
],
[
[
64551,
64551
],
"mapped",
[
1591,
1605
]
],
[
[
64552,
64552
],
"mapped",
[
1592,
1605
]
],
[
[
64553,
64553
],
"mapped",
[
1593,
1580
]
],
[
[
64554,
64554
],
"mapped",
[
1593,
1605
]
],
[
[
64555,
64555
],
"mapped",
[
1594,
1580
]
],
[
[
64556,
64556
],
"mapped",
[
1594,
1605
]
],
[
[
64557,
64557
],
"mapped",
[
1601,
1580
]
],
[
[
64558,
64558
],
"mapped",
[
1601,
1581
]
],
[
[
64559,
64559
],
"mapped",
[
1601,
1582
]
],
[
[
64560,
64560
],
"mapped",
[
1601,
1605
]
],
[
[
64561,
64561
],
"mapped",
[
1601,
1609
]
],
[
[
64562,
64562
],
"mapped",
[
1601,
1610
]
],
[
[
64563,
64563
],
"mapped",
[
1602,
1581
]
],
[
[
64564,
64564
],
"mapped",
[
1602,
1605
]
],
[
[
64565,
64565
],
"mapped",
[
1602,
1609
]
],
[
[
64566,
64566
],
"mapped",
[
1602,
1610
]
],
[
[
64567,
64567
],
"mapped",
[
1603,
1575
]
],
[
[
64568,
64568
],
"mapped",
[
1603,
1580
]
],
[
[
64569,
64569
],
"mapped",
[
1603,
1581
]
],
[
[
64570,
64570
],
"mapped",
[
1603,
1582
]
],
[
[
64571,
64571
],
"mapped",
[
1603,
1604
]
],
[
[
64572,
64572
],
"mapped",
[
1603,
1605
]
],
[
[
64573,
64573
],
"mapped",
[
1603,
1609
]
],
[
[
64574,
64574
],
"mapped",
[
1603,
1610
]
],
[
[
64575,
64575
],
"mapped",
[
1604,
1580
]
],
[
[
64576,
64576
],
"mapped",
[
1604,
1581
]
],
[
[
64577,
64577
],
"mapped",
[
1604,
1582
]
],
[
[
64578,
64578
],
"mapped",
[
1604,
1605
]
],
[
[
64579,
64579
],
"mapped",
[
1604,
1609
]
],
[
[
64580,
64580
],
"mapped",
[
1604,
1610
]
],
[
[
64581,
64581
],
"mapped",
[
1605,
1580
]
],
[
[
64582,
64582
],
"mapped",
[
1605,
1581
]
],
[
[
64583,
64583
],
"mapped",
[
1605,
1582
]
],
[
[
64584,
64584
],
"mapped",
[
1605,
1605
]
],
[
[
64585,
64585
],
"mapped",
[
1605,
1609
]
],
[
[
64586,
64586
],
"mapped",
[
1605,
1610
]
],
[
[
64587,
64587
],
"mapped",
[
1606,
1580
]
],
[
[
64588,
64588
],
"mapped",
[
1606,
1581
]
],
[
[
64589,
64589
],
"mapped",
[
1606,
1582
]
],
[
[
64590,
64590
],
"mapped",
[
1606,
1605
]
],
[
[
64591,
64591
],
"mapped",
[
1606,
1609
]
],
[
[
64592,
64592
],
"mapped",
[
1606,
1610
]
],
[
[
64593,
64593
],
"mapped",
[
1607,
1580
]
],
[
[
64594,
64594
],
"mapped",
[
1607,
1605
]
],
[
[
64595,
64595
],
"mapped",
[
1607,
1609
]
],
[
[
64596,
64596
],
"mapped",
[
1607,
1610
]
],
[
[
64597,
64597
],
"mapped",
[
1610,
1580
]
],
[
[
64598,
64598
],
"mapped",
[
1610,
1581
]
],
[
[
64599,
64599
],
"mapped",
[
1610,
1582
]
],
[
[
64600,
64600
],
"mapped",
[
1610,
1605
]
],
[
[
64601,
64601
],
"mapped",
[
1610,
1609
]
],
[
[
64602,
64602
],
"mapped",
[
1610,
1610
]
],
[
[
64603,
64603
],
"mapped",
[
1584,
1648
]
],
[
[
64604,
64604
],
"mapped",
[
1585,
1648
]
],
[
[
64605,
64605
],
"mapped",
[
1609,
1648
]
],
[
[
64606,
64606
],
"disallowed_STD3_mapped",
[
32,
1612,
1617
]
],
[
[
64607,
64607
],
"disallowed_STD3_mapped",
[
32,
1613,
1617
]
],
[
[
64608,
64608
],
"disallowed_STD3_mapped",
[
32,
1614,
1617
]
],
[
[
64609,
64609
],
"disallowed_STD3_mapped",
[
32,
1615,
1617
]
],
[
[
64610,
64610
],
"disallowed_STD3_mapped",
[
32,
1616,
1617
]
],
[
[
64611,
64611
],
"disallowed_STD3_mapped",
[
32,
1617,
1648
]
],
[
[
64612,
64612
],
"mapped",
[
1574,
1585
]
],
[
[
64613,
64613
],
"mapped",
[
1574,
1586
]
],
[
[
64614,
64614
],
"mapped",
[
1574,
1605
]
],
[
[
64615,
64615
],
"mapped",
[
1574,
1606
]
],
[
[
64616,
64616
],
"mapped",
[
1574,
1609
]
],
[
[
64617,
64617
],
"mapped",
[
1574,
1610
]
],
[
[
64618,
64618
],
"mapped",
[
1576,
1585
]
],
[
[
64619,
64619
],
"mapped",
[
1576,
1586
]
],
[
[
64620,
64620
],
"mapped",
[
1576,
1605
]
],
[
[
64621,
64621
],
"mapped",
[
1576,
1606
]
],
[
[
64622,
64622
],
"mapped",
[
1576,
1609
]
],
[
[
64623,
64623
],
"mapped",
[
1576,
1610
]
],
[
[
64624,
64624
],
"mapped",
[
1578,
1585
]
],
[
[
64625,
64625
],
"mapped",
[
1578,
1586
]
],
[
[
64626,
64626
],
"mapped",
[
1578,
1605
]
],
[
[
64627,
64627
],
"mapped",
[
1578,
1606
]
],
[
[
64628,
64628
],
"mapped",
[
1578,
1609
]
],
[
[
64629,
64629
],
"mapped",
[
1578,
1610
]
],
[
[
64630,
64630
],
"mapped",
[
1579,
1585
]
],
[
[
64631,
64631
],
"mapped",
[
1579,
1586
]
],
[
[
64632,
64632
],
"mapped",
[
1579,
1605
]
],
[
[
64633,
64633
],
"mapped",
[
1579,
1606
]
],
[
[
64634,
64634
],
"mapped",
[
1579,
1609
]
],
[
[
64635,
64635
],
"mapped",
[
1579,
1610
]
],
[
[
64636,
64636
],
"mapped",
[
1601,
1609
]
],
[
[
64637,
64637
],
"mapped",
[
1601,
1610
]
],
[
[
64638,
64638
],
"mapped",
[
1602,
1609
]
],
[
[
64639,
64639
],
"mapped",
[
1602,
1610
]
],
[
[
64640,
64640
],
"mapped",
[
1603,
1575
]
],
[
[
64641,
64641
],
"mapped",
[
1603,
1604
]
],
[
[
64642,
64642
],
"mapped",
[
1603,
1605
]
],
[
[
64643,
64643
],
"mapped",
[
1603,
1609
]
],
[
[
64644,
64644
],
"mapped",
[
1603,
1610
]
],
[
[
64645,
64645
],
"mapped",
[
1604,
1605
]
],
[
[
64646,
64646
],
"mapped",
[
1604,
1609
]
],
[
[
64647,
64647
],
"mapped",
[
1604,
1610
]
],
[
[
64648,
64648
],
"mapped",
[
1605,
1575
]
],
[
[
64649,
64649
],
"mapped",
[
1605,
1605
]
],
[
[
64650,
64650
],
"mapped",
[
1606,
1585
]
],
[
[
64651,
64651
],
"mapped",
[
1606,
1586
]
],
[
[
64652,
64652
],
"mapped",
[
1606,
1605
]
],
[
[
64653,
64653
],
"mapped",
[
1606,
1606
]
],
[
[
64654,
64654
],
"mapped",
[
1606,
1609
]
],
[
[
64655,
64655
],
"mapped",
[
1606,
1610
]
],
[
[
64656,
64656
],
"mapped",
[
1609,
1648
]
],
[
[
64657,
64657
],
"mapped",
[
1610,
1585
]
],
[
[
64658,
64658
],
"mapped",
[
1610,
1586
]
],
[
[
64659,
64659
],
"mapped",
[
1610,
1605
]
],
[
[
64660,
64660
],
"mapped",
[
1610,
1606
]
],
[
[
64661,
64661
],
"mapped",
[
1610,
1609
]
],
[
[
64662,
64662
],
"mapped",
[
1610,
1610
]
],
[
[
64663,
64663
],
"mapped",
[
1574,
1580
]
],
[
[
64664,
64664
],
"mapped",
[
1574,
1581
]
],
[
[
64665,
64665
],
"mapped",
[
1574,
1582
]
],
[
[
64666,
64666
],
"mapped",
[
1574,
1605
]
],
[
[
64667,
64667
],
"mapped",
[
1574,
1607
]
],
[
[
64668,
64668
],
"mapped",
[
1576,
1580
]
],
[
[
64669,
64669
],
"mapped",
[
1576,
1581
]
],
[
[
64670,
64670
],
"mapped",
[
1576,
1582
]
],
[
[
64671,
64671
],
"mapped",
[
1576,
1605
]
],
[
[
64672,
64672
],
"mapped",
[
1576,
1607
]
],
[
[
64673,
64673
],
"mapped",
[
1578,
1580
]
],
[
[
64674,
64674
],
"mapped",
[
1578,
1581
]
],
[
[
64675,
64675
],
"mapped",
[
1578,
1582
]
],
[
[
64676,
64676
],
"mapped",
[
1578,
1605
]
],
[
[
64677,
64677
],
"mapped",
[
1578,
1607
]
],
[
[
64678,
64678
],
"mapped",
[
1579,
1605
]
],
[
[
64679,
64679
],
"mapped",
[
1580,
1581
]
],
[
[
64680,
64680
],
"mapped",
[
1580,
1605
]
],
[
[
64681,
64681
],
"mapped",
[
1581,
1580
]
],
[
[
64682,
64682
],
"mapped",
[
1581,
1605
]
],
[
[
64683,
64683
],
"mapped",
[
1582,
1580
]
],
[
[
64684,
64684
],
"mapped",
[
1582,
1605
]
],
[
[
64685,
64685
],
"mapped",
[
1587,
1580
]
],
[
[
64686,
64686
],
"mapped",
[
1587,
1581
]
],
[
[
64687,
64687
],
"mapped",
[
1587,
1582
]
],
[
[
64688,
64688
],
"mapped",
[
1587,
1605
]
],
[
[
64689,
64689
],
"mapped",
[
1589,
1581
]
],
[
[
64690,
64690
],
"mapped",
[
1589,
1582
]
],
[
[
64691,
64691
],
"mapped",
[
1589,
1605
]
],
[
[
64692,
64692
],
"mapped",
[
1590,
1580
]
],
[
[
64693,
64693
],
"mapped",
[
1590,
1581
]
],
[
[
64694,
64694
],
"mapped",
[
1590,
1582
]
],
[
[
64695,
64695
],
"mapped",
[
1590,
1605
]
],
[
[
64696,
64696
],
"mapped",
[
1591,
1581
]
],
[
[
64697,
64697
],
"mapped",
[
1592,
1605
]
],
[
[
64698,
64698
],
"mapped",
[
1593,
1580
]
],
[
[
64699,
64699
],
"mapped",
[
1593,
1605
]
],
[
[
64700,
64700
],
"mapped",
[
1594,
1580
]
],
[
[
64701,
64701
],
"mapped",
[
1594,
1605
]
],
[
[
64702,
64702
],
"mapped",
[
1601,
1580
]
],
[
[
64703,
64703
],
"mapped",
[
1601,
1581
]
],
[
[
64704,
64704
],
"mapped",
[
1601,
1582
]
],
[
[
64705,
64705
],
"mapped",
[
1601,
1605
]
],
[
[
64706,
64706
],
"mapped",
[
1602,
1581
]
],
[
[
64707,
64707
],
"mapped",
[
1602,
1605
]
],
[
[
64708,
64708
],
"mapped",
[
1603,
1580
]
],
[
[
64709,
64709
],
"mapped",
[
1603,
1581
]
],
[
[
64710,
64710
],
"mapped",
[
1603,
1582
]
],
[
[
64711,
64711
],
"mapped",
[
1603,
1604
]
],
[
[
64712,
64712
],
"mapped",
[
1603,
1605
]
],
[
[
64713,
64713
],
"mapped",
[
1604,
1580
]
],
[
[
64714,
64714
],
"mapped",
[
1604,
1581
]
],
[
[
64715,
64715
],
"mapped",
[
1604,
1582
]
],
[
[
64716,
64716
],
"mapped",
[
1604,
1605
]
],
[
[
64717,
64717
],
"mapped",
[
1604,
1607
]
],
[
[
64718,
64718
],
"mapped",
[
1605,
1580
]
],
[
[
64719,
64719
],
"mapped",
[
1605,
1581
]
],
[
[
64720,
64720
],
"mapped",
[
1605,
1582
]
],
[
[
64721,
64721
],
"mapped",
[
1605,
1605
]
],
[
[
64722,
64722
],
"mapped",
[
1606,
1580
]
],
[
[
64723,
64723
],
"mapped",
[
1606,
1581
]
],
[
[
64724,
64724
],
"mapped",
[
1606,
1582
]
],
[
[
64725,
64725
],
"mapped",
[
1606,
1605
]
],
[
[
64726,
64726
],
"mapped",
[
1606,
1607
]
],
[
[
64727,
64727
],
"mapped",
[
1607,
1580
]
],
[
[
64728,
64728
],
"mapped",
[
1607,
1605
]
],
[
[
64729,
64729
],
"mapped",
[
1607,
1648
]
],
[
[
64730,
64730
],
"mapped",
[
1610,
1580
]
],
[
[
64731,
64731
],
"mapped",
[
1610,
1581
]
],
[
[
64732,
64732
],
"mapped",
[
1610,
1582
]
],
[
[
64733,
64733
],
"mapped",
[
1610,
1605
]
],
[
[
64734,
64734
],
"mapped",
[
1610,
1607
]
],
[
[
64735,
64735
],
"mapped",
[
1574,
1605
]
],
[
[
64736,
64736
],
"mapped",
[
1574,
1607
]
],
[
[
64737,
64737
],
"mapped",
[
1576,
1605
]
],
[
[
64738,
64738
],
"mapped",
[
1576,
1607
]
],
[
[
64739,
64739
],
"mapped",
[
1578,
1605
]
],
[
[
64740,
64740
],
"mapped",
[
1578,
1607
]
],
[
[
64741,
64741
],
"mapped",
[
1579,
1605
]
],
[
[
64742,
64742
],
"mapped",
[
1579,
1607
]
],
[
[
64743,
64743
],
"mapped",
[
1587,
1605
]
],
[
[
64744,
64744
],
"mapped",
[
1587,
1607
]
],
[
[
64745,
64745
],
"mapped",
[
1588,
1605
]
],
[
[
64746,
64746
],
"mapped",
[
1588,
1607
]
],
[
[
64747,
64747
],
"mapped",
[
1603,
1604
]
],
[
[
64748,
64748
],
"mapped",
[
1603,
1605
]
],
[
[
64749,
64749
],
"mapped",
[
1604,
1605
]
],
[
[
64750,
64750
],
"mapped",
[
1606,
1605
]
],
[
[
64751,
64751
],
"mapped",
[
1606,
1607
]
],
[
[
64752,
64752
],
"mapped",
[
1610,
1605
]
],
[
[
64753,
64753
],
"mapped",
[
1610,
1607
]
],
[
[
64754,
64754
],
"mapped",
[
1600,
1614,
1617
]
],
[
[
64755,
64755
],
"mapped",
[
1600,
1615,
1617
]
],
[
[
64756,
64756
],
"mapped",
[
1600,
1616,
1617
]
],
[
[
64757,
64757
],
"mapped",
[
1591,
1609
]
],
[
[
64758,
64758
],
"mapped",
[
1591,
1610
]
],
[
[
64759,
64759
],
"mapped",
[
1593,
1609
]
],
[
[
64760,
64760
],
"mapped",
[
1593,
1610
]
],
[
[
64761,
64761
],
"mapped",
[
1594,
1609
]
],
[
[
64762,
64762
],
"mapped",
[
1594,
1610
]
],
[
[
64763,
64763
],
"mapped",
[
1587,
1609
]
],
[
[
64764,
64764
],
"mapped",
[
1587,
1610
]
],
[
[
64765,
64765
],
"mapped",
[
1588,
1609
]
],
[
[
64766,
64766
],
"mapped",
[
1588,
1610
]
],
[
[
64767,
64767
],
"mapped",
[
1581,
1609
]
],
[
[
64768,
64768
],
"mapped",
[
1581,
1610
]
],
[
[
64769,
64769
],
"mapped",
[
1580,
1609
]
],
[
[
64770,
64770
],
"mapped",
[
1580,
1610
]
],
[
[
64771,
64771
],
"mapped",
[
1582,
1609
]
],
[
[
64772,
64772
],
"mapped",
[
1582,
1610
]
],
[
[
64773,
64773
],
"mapped",
[
1589,
1609
]
],
[
[
64774,
64774
],
"mapped",
[
1589,
1610
]
],
[
[
64775,
64775
],
"mapped",
[
1590,
1609
]
],
[
[
64776,
64776
],
"mapped",
[
1590,
1610
]
],
[
[
64777,
64777
],
"mapped",
[
1588,
1580
]
],
[
[
64778,
64778
],
"mapped",
[
1588,
1581
]
],
[
[
64779,
64779
],
"mapped",
[
1588,
1582
]
],
[
[
64780,
64780
],
"mapped",
[
1588,
1605
]
],
[
[
64781,
64781
],
"mapped",
[
1588,
1585
]
],
[
[
64782,
64782
],
"mapped",
[
1587,
1585
]
],
[
[
64783,
64783
],
"mapped",
[
1589,
1585
]
],
[
[
64784,
64784
],
"mapped",
[
1590,
1585
]
],
[
[
64785,
64785
],
"mapped",
[
1591,
1609
]
],
[
[
64786,
64786
],
"mapped",
[
1591,
1610
]
],
[
[
64787,
64787
],
"mapped",
[
1593,
1609
]
],
[
[
64788,
64788
],
"mapped",
[
1593,
1610
]
],
[
[
64789,
64789
],
"mapped",
[
1594,
1609
]
],
[
[
64790,
64790
],
"mapped",
[
1594,
1610
]
],
[
[
64791,
64791
],
"mapped",
[
1587,
1609
]
],
[
[
64792,
64792
],
"mapped",
[
1587,
1610
]
],
[
[
64793,
64793
],
"mapped",
[
1588,
1609
]
],
[
[
64794,
64794
],
"mapped",
[
1588,
1610
]
],
[
[
64795,
64795
],
"mapped",
[
1581,
1609
]
],
[
[
64796,
64796
],
"mapped",
[
1581,
1610
]
],
[
[
64797,
64797
],
"mapped",
[
1580,
1609
]
],
[
[
64798,
64798
],
"mapped",
[
1580,
1610
]
],
[
[
64799,
64799
],
"mapped",
[
1582,
1609
]
],
[
[
64800,
64800
],
"mapped",
[
1582,
1610
]
],
[
[
64801,
64801
],
"mapped",
[
1589,
1609
]
],
[
[
64802,
64802
],
"mapped",
[
1589,
1610
]
],
[
[
64803,
64803
],
"mapped",
[
1590,
1609
]
],
[
[
64804,
64804
],
"mapped",
[
1590,
1610
]
],
[
[
64805,
64805
],
"mapped",
[
1588,
1580
]
],
[
[
64806,
64806
],
"mapped",
[
1588,
1581
]
],
[
[
64807,
64807
],
"mapped",
[
1588,
1582
]
],
[
[
64808,
64808
],
"mapped",
[
1588,
1605
]
],
[
[
64809,
64809
],
"mapped",
[
1588,
1585
]
],
[
[
64810,
64810
],
"mapped",
[
1587,
1585
]
],
[
[
64811,
64811
],
"mapped",
[
1589,
1585
]
],
[
[
64812,
64812
],
"mapped",
[
1590,
1585
]
],
[
[
64813,
64813
],
"mapped",
[
1588,
1580
]
],
[
[
64814,
64814
],
"mapped",
[
1588,
1581
]
],
[
[
64815,
64815
],
"mapped",
[
1588,
1582
]
],
[
[
64816,
64816
],
"mapped",
[
1588,
1605
]
],
[
[
64817,
64817
],
"mapped",
[
1587,
1607
]
],
[
[
64818,
64818
],
"mapped",
[
1588,
1607
]
],
[
[
64819,
64819
],
"mapped",
[
1591,
1605
]
],
[
[
64820,
64820
],
"mapped",
[
1587,
1580
]
],
[
[
64821,
64821
],
"mapped",
[
1587,
1581
]
],
[
[
64822,
64822
],
"mapped",
[
1587,
1582
]
],
[
[
64823,
64823
],
"mapped",
[
1588,
1580
]
],
[
[
64824,
64824
],
"mapped",
[
1588,
1581
]
],
[
[
64825,
64825
],
"mapped",
[
1588,
1582
]
],
[
[
64826,
64826
],
"mapped",
[
1591,
1605
]
],
[
[
64827,
64827
],
"mapped",
[
1592,
1605
]
],
[
[
64828,
64829
],
"mapped",
[
1575,
1611
]
],
[
[
64830,
64831
],
"valid",
[
],
"NV8"
],
[
[
64832,
64847
],
"disallowed"
],
[
[
64848,
64848
],
"mapped",
[
1578,
1580,
1605
]
],
[
[
64849,
64850
],
"mapped",
[
1578,
1581,
1580
]
],
[
[
64851,
64851
],
"mapped",
[
1578,
1581,
1605
]
],
[
[
64852,
64852
],
"mapped",
[
1578,
1582,
1605
]
],
[
[
64853,
64853
],
"mapped",
[
1578,
1605,
1580
]
],
[
[
64854,
64854
],
"mapped",
[
1578,
1605,
1581
]
],
[
[
64855,
64855
],
"mapped",
[
1578,
1605,
1582
]
],
[
[
64856,
64857
],
"mapped",
[
1580,
1605,
1581
]
],
[
[
64858,
64858
],
"mapped",
[
1581,
1605,
1610
]
],
[
[
64859,
64859
],
"mapped",
[
1581,
1605,
1609
]
],
[
[
64860,
64860
],
"mapped",
[
1587,
1581,
1580
]
],
[
[
64861,
64861
],
"mapped",
[
1587,
1580,
1581
]
],
[
[
64862,
64862
],
"mapped",
[
1587,
1580,
1609
]
],
[
[
64863,
64864
],
"mapped",
[
1587,
1605,
1581
]
],
[
[
64865,
64865
],
"mapped",
[
1587,
1605,
1580
]
],
[
[
64866,
64867
],
"mapped",
[
1587,
1605,
1605
]
],
[
[
64868,
64869
],
"mapped",
[
1589,
1581,
1581
]
],
[
[
64870,
64870
],
"mapped",
[
1589,
1605,
1605
]
],
[
[
64871,
64872
],
"mapped",
[
1588,
1581,
1605
]
],
[
[
64873,
64873
],
"mapped",
[
1588,
1580,
1610
]
],
[
[
64874,
64875
],
"mapped",
[
1588,
1605,
1582
]
],
[
[
64876,
64877
],
"mapped",
[
1588,
1605,
1605
]
],
[
[
64878,
64878
],
"mapped",
[
1590,
1581,
1609
]
],
[
[
64879,
64880
],
"mapped",
[
1590,
1582,
1605
]
],
[
[
64881,
64882
],
"mapped",
[
1591,
1605,
1581
]
],
[
[
64883,
64883
],
"mapped",
[
1591,
1605,
1605
]
],
[
[
64884,
64884
],
"mapped",
[
1591,
1605,
1610
]
],
[
[
64885,
64885
],
"mapped",
[
1593,
1580,
1605
]
],
[
[
64886,
64887
],
"mapped",
[
1593,
1605,
1605
]
],
[
[
64888,
64888
],
"mapped",
[
1593,
1605,
1609
]
],
[
[
64889,
64889
],
"mapped",
[
1594,
1605,
1605
]
],
[
[
64890,
64890
],
"mapped",
[
1594,
1605,
1610
]
],
[
[
64891,
64891
],
"mapped",
[
1594,
1605,
1609
]
],
[
[
64892,
64893
],
"mapped",
[
1601,
1582,
1605
]
],
[
[
64894,
64894
],
"mapped",
[
1602,
1605,
1581
]
],
[
[
64895,
64895
],
"mapped",
[
1602,
1605,
1605
]
],
[
[
64896,
64896
],
"mapped",
[
1604,
1581,
1605
]
],
[
[
64897,
64897
],
"mapped",
[
1604,
1581,
1610
]
],
[
[
64898,
64898
],
"mapped",
[
1604,
1581,
1609
]
],
[
[
64899,
64900
],
"mapped",
[
1604,
1580,
1580
]
],
[
[
64901,
64902
],
"mapped",
[
1604,
1582,
1605
]
],
[
[
64903,
64904
],
"mapped",
[
1604,
1605,
1581
]
],
[
[
64905,
64905
],
"mapped",
[
1605,
1581,
1580
]
],
[
[
64906,
64906
],
"mapped",
[
1605,
1581,
1605
]
],
[
[
64907,
64907
],
"mapped",
[
1605,
1581,
1610
]
],
[
[
64908,
64908
],
"mapped",
[
1605,
1580,
1581
]
],
[
[
64909,
64909
],
"mapped",
[
1605,
1580,
1605
]
],
[
[
64910,
64910
],
"mapped",
[
1605,
1582,
1580
]
],
[
[
64911,
64911
],
"mapped",
[
1605,
1582,
1605
]
],
[
[
64912,
64913
],
"disallowed"
],
[
[
64914,
64914
],
"mapped",
[
1605,
1580,
1582
]
],
[
[
64915,
64915
],
"mapped",
[
1607,
1605,
1580
]
],
[
[
64916,
64916
],
"mapped",
[
1607,
1605,
1605
]
],
[
[
64917,
64917
],
"mapped",
[
1606,
1581,
1605
]
],
[
[
64918,
64918
],
"mapped",
[
1606,
1581,
1609
]
],
[
[
64919,
64920
],
"mapped",
[
1606,
1580,
1605
]
],
[
[
64921,
64921
],
"mapped",
[
1606,
1580,
1609
]
],
[
[
64922,
64922
],
"mapped",
[
1606,
1605,
1610
]
],
[
[
64923,
64923
],
"mapped",
[
1606,
1605,
1609
]
],
[
[
64924,
64925
],
"mapped",
[
1610,
1605,
1605
]
],
[
[
64926,
64926
],
"mapped",
[
1576,
1582,
1610
]
],
[
[
64927,
64927
],
"mapped",
[
1578,
1580,
1610
]
],
[
[
64928,
64928
],
"mapped",
[
1578,
1580,
1609
]
],
[
[
64929,
64929
],
"mapped",
[
1578,
1582,
1610
]
],
[
[
64930,
64930
],
"mapped",
[
1578,
1582,
1609
]
],
[
[
64931,
64931
],
"mapped",
[
1578,
1605,
1610
]
],
[
[
64932,
64932
],
"mapped",
[
1578,
1605,
1609
]
],
[
[
64933,
64933
],
"mapped",
[
1580,
1605,
1610
]
],
[
[
64934,
64934
],
"mapped",
[
1580,
1581,
1609
]
],
[
[
64935,
64935
],
"mapped",
[
1580,
1605,
1609
]
],
[
[
64936,
64936
],
"mapped",
[
1587,
1582,
1609
]
],
[
[
64937,
64937
],
"mapped",
[
1589,
1581,
1610
]
],
[
[
64938,
64938
],
"mapped",
[
1588,
1581,
1610
]
],
[
[
64939,
64939
],
"mapped",
[
1590,
1581,
1610
]
],
[
[
64940,
64940
],
"mapped",
[
1604,
1580,
1610
]
],
[
[
64941,
64941
],
"mapped",
[
1604,
1605,
1610
]
],
[
[
64942,
64942
],
"mapped",
[
1610,
1581,
1610
]
],
[
[
64943,
64943
],
"mapped",
[
1610,
1580,
1610
]
],
[
[
64944,
64944
],
"mapped",
[
1610,
1605,
1610
]
],
[
[
64945,
64945
],
"mapped",
[
1605,
1605,
1610
]
],
[
[
64946,
64946
],
"mapped",
[
1602,
1605,
1610
]
],
[
[
64947,
64947
],
"mapped",
[
1606,
1581,
1610
]
],
[
[
64948,
64948
],
"mapped",
[
1602,
1605,
1581
]
],
[
[
64949,
64949
],
"mapped",
[
1604,
1581,
1605
]
],
[
[
64950,
64950
],
"mapped",
[
1593,
1605,
1610
]
],
[
[
64951,
64951
],
"mapped",
[
1603,
1605,
1610
]
],
[
[
64952,
64952
],
"mapped",
[
1606,
1580,
1581
]
],
[
[
64953,
64953
],
"mapped",
[
1605,
1582,
1610
]
],
[
[
64954,
64954
],
"mapped",
[
1604,
1580,
1605
]
],
[
[
64955,
64955
],
"mapped",
[
1603,
1605,
1605
]
],
[
[
64956,
64956
],
"mapped",
[
1604,
1580,
1605
]
],
[
[
64957,
64957
],
"mapped",
[
1606,
1580,
1581
]
],
[
[
64958,
64958
],
"mapped",
[
1580,
1581,
1610
]
],
[
[
64959,
64959
],
"mapped",
[
1581,
1580,
1610
]
],
[
[
64960,
64960
],
"mapped",
[
1605,
1580,
1610
]
],
[
[
64961,
64961
],
"mapped",
[
1601,
1605,
1610
]
],
[
[
64962,
64962
],
"mapped",
[
1576,
1581,
1610
]
],
[
[
64963,
64963
],
"mapped",
[
1603,
1605,
1605
]
],
[
[
64964,
64964
],
"mapped",
[
1593,
1580,
1605
]
],
[
[
64965,
64965
],
"mapped",
[
1589,
1605,
1605
]
],
[
[
64966,
64966
],
"mapped",
[
1587,
1582,
1610
]
],
[
[
64967,
64967
],
"mapped",
[
1606,
1580,
1610
]
],
[
[
64968,
64975
],
"disallowed"
],
[
[
64976,
65007
],
"disallowed"
],
[
[
65008,
65008
],
"mapped",
[
1589,
1604,
1746
]
],
[
[
65009,
65009
],
"mapped",
[
1602,
1604,
1746
]
],
[
[
65010,
65010
],
"mapped",
[
1575,
1604,
1604,
1607
]
],
[
[
65011,
65011
],
"mapped",
[
1575,
1603,
1576,
1585
]
],
[
[
65012,
65012
],
"mapped",
[
1605,
1581,
1605,
1583
]
],
[
[
65013,
65013
],
"mapped",
[
1589,
1604,
1593,
1605
]
],
[
[
65014,
65014
],
"mapped",
[
1585,
1587,
1608,
1604
]
],
[
[
65015,
65015
],
"mapped",
[
1593,
1604,
1610,
1607
]
],
[
[
65016,
65016
],
"mapped",
[
1608,
1587,
1604,
1605
]
],
[
[
65017,
65017
],
"mapped",
[
1589,
1604,
1609
]
],
[
[
65018,
65018
],
"disallowed_STD3_mapped",
[
1589,
1604,
1609,
32,
1575,
1604,
1604,
1607,
32,
1593,
1604,
1610,
1607,
32,
1608,
1587,
1604,
1605
]
],
[
[
65019,
65019
],
"disallowed_STD3_mapped",
[
1580,
1604,
32,
1580,
1604,
1575,
1604,
1607
]
],
[
[
65020,
65020
],
"mapped",
[
1585,
1740,
1575,
1604
]
],
[
[
65021,
65021
],
"valid",
[
],
"NV8"
],
[
[
65022,
65023
],
"disallowed"
],
[
[
65024,
65039
],
"ignored"
],
[
[
65040,
65040
],
"disallowed_STD3_mapped",
[
44
]
],
[
[
65041,
65041
],
"mapped",
[
12289
]
],
[
[
65042,
65042
],
"disallowed"
],
[
[
65043,
65043
],
"disallowed_STD3_mapped",
[
58
]
],
[
[
65044,
65044
],
"disallowed_STD3_mapped",
[
59
]
],
[
[
65045,
65045
],
"disallowed_STD3_mapped",
[
33
]
],
[
[
65046,
65046
],
"disallowed_STD3_mapped",
[
63
]
],
[
[
65047,
65047
],
"mapped",
[
12310
]
],
[
[
65048,
65048
],
"mapped",
[
12311
]
],
[
[
65049,
65049
],
"disallowed"
],
[
[
65050,
65055
],
"disallowed"
],
[
[
65056,
65059
],
"valid"
],
[
[
65060,
65062
],
"valid"
],
[
[
65063,
65069
],
"valid"
],
[
[
65070,
65071
],
"valid"
],
[
[
65072,
65072
],
"disallowed"
],
[
[
65073,
65073
],
"mapped",
[
8212
]
],
[
[
65074,
65074
],
"mapped",
[
8211
]
],
[
[
65075,
65076
],
"disallowed_STD3_mapped",
[
95
]
],
[
[
65077,
65077
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
65078,
65078
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
65079,
65079
],
"disallowed_STD3_mapped",
[
123
]
],
[
[
65080,
65080
],
"disallowed_STD3_mapped",
[
125
]
],
[
[
65081,
65081
],
"mapped",
[
12308
]
],
[
[
65082,
65082
],
"mapped",
[
12309
]
],
[
[
65083,
65083
],
"mapped",
[
12304
]
],
[
[
65084,
65084
],
"mapped",
[
12305
]
],
[
[
65085,
65085
],
"mapped",
[
12298
]
],
[
[
65086,
65086
],
"mapped",
[
12299
]
],
[
[
65087,
65087
],
"mapped",
[
12296
]
],
[
[
65088,
65088
],
"mapped",
[
12297
]
],
[
[
65089,
65089
],
"mapped",
[
12300
]
],
[
[
65090,
65090
],
"mapped",
[
12301
]
],
[
[
65091,
65091
],
"mapped",
[
12302
]
],
[
[
65092,
65092
],
"mapped",
[
12303
]
],
[
[
65093,
65094
],
"valid",
[
],
"NV8"
],
[
[
65095,
65095
],
"disallowed_STD3_mapped",
[
91
]
],
[
[
65096,
65096
],
"disallowed_STD3_mapped",
[
93
]
],
[
[
65097,
65100
],
"disallowed_STD3_mapped",
[
32,
773
]
],
[
[
65101,
65103
],
"disallowed_STD3_mapped",
[
95
]
],
[
[
65104,
65104
],
"disallowed_STD3_mapped",
[
44
]
],
[
[
65105,
65105
],
"mapped",
[
12289
]
],
[
[
65106,
65106
],
"disallowed"
],
[
[
65107,
65107
],
"disallowed"
],
[
[
65108,
65108
],
"disallowed_STD3_mapped",
[
59
]
],
[
[
65109,
65109
],
"disallowed_STD3_mapped",
[
58
]
],
[
[
65110,
65110
],
"disallowed_STD3_mapped",
[
63
]
],
[
[
65111,
65111
],
"disallowed_STD3_mapped",
[
33
]
],
[
[
65112,
65112
],
"mapped",
[
8212
]
],
[
[
65113,
65113
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
65114,
65114
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
65115,
65115
],
"disallowed_STD3_mapped",
[
123
]
],
[
[
65116,
65116
],
"disallowed_STD3_mapped",
[
125
]
],
[
[
65117,
65117
],
"mapped",
[
12308
]
],
[
[
65118,
65118
],
"mapped",
[
12309
]
],
[
[
65119,
65119
],
"disallowed_STD3_mapped",
[
35
]
],
[
[
65120,
65120
],
"disallowed_STD3_mapped",
[
38
]
],
[
[
65121,
65121
],
"disallowed_STD3_mapped",
[
42
]
],
[
[
65122,
65122
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
65123,
65123
],
"mapped",
[
45
]
],
[
[
65124,
65124
],
"disallowed_STD3_mapped",
[
60
]
],
[
[
65125,
65125
],
"disallowed_STD3_mapped",
[
62
]
],
[
[
65126,
65126
],
"disallowed_STD3_mapped",
[
61
]
],
[
[
65127,
65127
],
"disallowed"
],
[
[
65128,
65128
],
"disallowed_STD3_mapped",
[
92
]
],
[
[
65129,
65129
],
"disallowed_STD3_mapped",
[
36
]
],
[
[
65130,
65130
],
"disallowed_STD3_mapped",
[
37
]
],
[
[
65131,
65131
],
"disallowed_STD3_mapped",
[
64
]
],
[
[
65132,
65135
],
"disallowed"
],
[
[
65136,
65136
],
"disallowed_STD3_mapped",
[
32,
1611
]
],
[
[
65137,
65137
],
"mapped",
[
1600,
1611
]
],
[
[
65138,
65138
],
"disallowed_STD3_mapped",
[
32,
1612
]
],
[
[
65139,
65139
],
"valid"
],
[
[
65140,
65140
],
"disallowed_STD3_mapped",
[
32,
1613
]
],
[
[
65141,
65141
],
"disallowed"
],
[
[
65142,
65142
],
"disallowed_STD3_mapped",
[
32,
1614
]
],
[
[
65143,
65143
],
"mapped",
[
1600,
1614
]
],
[
[
65144,
65144
],
"disallowed_STD3_mapped",
[
32,
1615
]
],
[
[
65145,
65145
],
"mapped",
[
1600,
1615
]
],
[
[
65146,
65146
],
"disallowed_STD3_mapped",
[
32,
1616
]
],
[
[
65147,
65147
],
"mapped",
[
1600,
1616
]
],
[
[
65148,
65148
],
"disallowed_STD3_mapped",
[
32,
1617
]
],
[
[
65149,
65149
],
"mapped",
[
1600,
1617
]
],
[
[
65150,
65150
],
"disallowed_STD3_mapped",
[
32,
1618
]
],
[
[
65151,
65151
],
"mapped",
[
1600,
1618
]
],
[
[
65152,
65152
],
"mapped",
[
1569
]
],
[
[
65153,
65154
],
"mapped",
[
1570
]
],
[
[
65155,
65156
],
"mapped",
[
1571
]
],
[
[
65157,
65158
],
"mapped",
[
1572
]
],
[
[
65159,
65160
],
"mapped",
[
1573
]
],
[
[
65161,
65164
],
"mapped",
[
1574
]
],
[
[
65165,
65166
],
"mapped",
[
1575
]
],
[
[
65167,
65170
],
"mapped",
[
1576
]
],
[
[
65171,
65172
],
"mapped",
[
1577
]
],
[
[
65173,
65176
],
"mapped",
[
1578
]
],
[
[
65177,
65180
],
"mapped",
[
1579
]
],
[
[
65181,
65184
],
"mapped",
[
1580
]
],
[
[
65185,
65188
],
"mapped",
[
1581
]
],
[
[
65189,
65192
],
"mapped",
[
1582
]
],
[
[
65193,
65194
],
"mapped",
[
1583
]
],
[
[
65195,
65196
],
"mapped",
[
1584
]
],
[
[
65197,
65198
],
"mapped",
[
1585
]
],
[
[
65199,
65200
],
"mapped",
[
1586
]
],
[
[
65201,
65204
],
"mapped",
[
1587
]
],
[
[
65205,
65208
],
"mapped",
[
1588
]
],
[
[
65209,
65212
],
"mapped",
[
1589
]
],
[
[
65213,
65216
],
"mapped",
[
1590
]
],
[
[
65217,
65220
],
"mapped",
[
1591
]
],
[
[
65221,
65224
],
"mapped",
[
1592
]
],
[
[
65225,
65228
],
"mapped",
[
1593
]
],
[
[
65229,
65232
],
"mapped",
[
1594
]
],
[
[
65233,
65236
],
"mapped",
[
1601
]
],
[
[
65237,
65240
],
"mapped",
[
1602
]
],
[
[
65241,
65244
],
"mapped",
[
1603
]
],
[
[
65245,
65248
],
"mapped",
[
1604
]
],
[
[
65249,
65252
],
"mapped",
[
1605
]
],
[
[
65253,
65256
],
"mapped",
[
1606
]
],
[
[
65257,
65260
],
"mapped",
[
1607
]
],
[
[
65261,
65262
],
"mapped",
[
1608
]
],
[
[
65263,
65264
],
"mapped",
[
1609
]
],
[
[
65265,
65268
],
"mapped",
[
1610
]
],
[
[
65269,
65270
],
"mapped",
[
1604,
1570
]
],
[
[
65271,
65272
],
"mapped",
[
1604,
1571
]
],
[
[
65273,
65274
],
"mapped",
[
1604,
1573
]
],
[
[
65275,
65276
],
"mapped",
[
1604,
1575
]
],
[
[
65277,
65278
],
"disallowed"
],
[
[
65279,
65279
],
"ignored"
],
[
[
65280,
65280
],
"disallowed"
],
[
[
65281,
65281
],
"disallowed_STD3_mapped",
[
33
]
],
[
[
65282,
65282
],
"disallowed_STD3_mapped",
[
34
]
],
[
[
65283,
65283
],
"disallowed_STD3_mapped",
[
35
]
],
[
[
65284,
65284
],
"disallowed_STD3_mapped",
[
36
]
],
[
[
65285,
65285
],
"disallowed_STD3_mapped",
[
37
]
],
[
[
65286,
65286
],
"disallowed_STD3_mapped",
[
38
]
],
[
[
65287,
65287
],
"disallowed_STD3_mapped",
[
39
]
],
[
[
65288,
65288
],
"disallowed_STD3_mapped",
[
40
]
],
[
[
65289,
65289
],
"disallowed_STD3_mapped",
[
41
]
],
[
[
65290,
65290
],
"disallowed_STD3_mapped",
[
42
]
],
[
[
65291,
65291
],
"disallowed_STD3_mapped",
[
43
]
],
[
[
65292,
65292
],
"disallowed_STD3_mapped",
[
44
]
],
[
[
65293,
65293
],
"mapped",
[
45
]
],
[
[
65294,
65294
],
"mapped",
[
46
]
],
[
[
65295,
65295
],
"disallowed_STD3_mapped",
[
47
]
],
[
[
65296,
65296
],
"mapped",
[
48
]
],
[
[
65297,
65297
],
"mapped",
[
49
]
],
[
[
65298,
65298
],
"mapped",
[
50
]
],
[
[
65299,
65299
],
"mapped",
[
51
]
],
[
[
65300,
65300
],
"mapped",
[
52
]
],
[
[
65301,
65301
],
"mapped",
[
53
]
],
[
[
65302,
65302
],
"mapped",
[
54
]
],
[
[
65303,
65303
],
"mapped",
[
55
]
],
[
[
65304,
65304
],
"mapped",
[
56
]
],
[
[
65305,
65305
],
"mapped",
[
57
]
],
[
[
65306,
65306
],
"disallowed_STD3_mapped",
[
58
]
],
[
[
65307,
65307
],
"disallowed_STD3_mapped",
[
59
]
],
[
[
65308,
65308
],
"disallowed_STD3_mapped",
[
60
]
],
[
[
65309,
65309
],
"disallowed_STD3_mapped",
[
61
]
],
[
[
65310,
65310
],
"disallowed_STD3_mapped",
[
62
]
],
[
[
65311,
65311
],
"disallowed_STD3_mapped",
[
63
]
],
[
[
65312,
65312
],
"disallowed_STD3_mapped",
[
64
]
],
[
[
65313,
65313
],
"mapped",
[
97
]
],
[
[
65314,
65314
],
"mapped",
[
98
]
],
[
[
65315,
65315
],
"mapped",
[
99
]
],
[
[
65316,
65316
],
"mapped",
[
100
]
],
[
[
65317,
65317
],
"mapped",
[
101
]
],
[
[
65318,
65318
],
"mapped",
[
102
]
],
[
[
65319,
65319
],
"mapped",
[
103
]
],
[
[
65320,
65320
],
"mapped",
[
104
]
],
[
[
65321,
65321
],
"mapped",
[
105
]
],
[
[
65322,
65322
],
"mapped",
[
106
]
],
[
[
65323,
65323
],
"mapped",
[
107
]
],
[
[
65324,
65324
],
"mapped",
[
108
]
],
[
[
65325,
65325
],
"mapped",
[
109
]
],
[
[
65326,
65326
],
"mapped",
[
110
]
],
[
[
65327,
65327
],
"mapped",
[
111
]
],
[
[
65328,
65328
],
"mapped",
[
112
]
],
[
[
65329,
65329
],
"mapped",
[
113
]
],
[
[
65330,
65330
],
"mapped",
[
114
]
],
[
[
65331,
65331
],
"mapped",
[
115
]
],
[
[
65332,
65332
],
"mapped",
[
116
]
],
[
[
65333,
65333
],
"mapped",
[
117
]
],
[
[
65334,
65334
],
"mapped",
[
118
]
],
[
[
65335,
65335
],
"mapped",
[
119
]
],
[
[
65336,
65336
],
"mapped",
[
120
]
],
[
[
65337,
65337
],
"mapped",
[
121
]
],
[
[
65338,
65338
],
"mapped",
[
122
]
],
[
[
65339,
65339
],
"disallowed_STD3_mapped",
[
91
]
],
[
[
65340,
65340
],
"disallowed_STD3_mapped",
[
92
]
],
[
[
65341,
65341
],
"disallowed_STD3_mapped",
[
93
]
],
[
[
65342,
65342
],
"disallowed_STD3_mapped",
[
94
]
],
[
[
65343,
65343
],
"disallowed_STD3_mapped",
[
95
]
],
[
[
65344,
65344
],
"disallowed_STD3_mapped",
[
96
]
],
[
[
65345,
65345
],
"mapped",
[
97
]
],
[
[
65346,
65346
],
"mapped",
[
98
]
],
[
[
65347,
65347
],
"mapped",
[
99
]
],
[
[
65348,
65348
],
"mapped",
[
100
]
],
[
[
65349,
65349
],
"mapped",
[
101
]
],
[
[
65350,
65350
],
"mapped",
[
102
]
],
[
[
65351,
65351
],
"mapped",
[
103
]
],
[
[
65352,
65352
],
"mapped",
[
104
]
],
[
[
65353,
65353
],
"mapped",
[
105
]
],
[
[
65354,
65354
],
"mapped",
[
106
]
],
[
[
65355,
65355
],
"mapped",
[
107
]
],
[
[
65356,
65356
],
"mapped",
[
108
]
],
[
[
65357,
65357
],
"mapped",
[
109
]
],
[
[
65358,
65358
],
"mapped",
[
110
]
],
[
[
65359,
65359
],
"mapped",
[
111
]
],
[
[
65360,
65360
],
"mapped",
[
112
]
],
[
[
65361,
65361
],
"mapped",
[
113
]
],
[
[
65362,
65362
],
"mapped",
[
114
]
],
[
[
65363,
65363
],
"mapped",
[
115
]
],
[
[
65364,
65364
],
"mapped",
[
116
]
],
[
[
65365,
65365
],
"mapped",
[
117
]
],
[
[
65366,
65366
],
"mapped",
[
118
]
],
[
[
65367,
65367
],
"mapped",
[
119
]
],
[
[
65368,
65368
],
"mapped",
[
120
]
],
[
[
65369,
65369
],
"mapped",
[
121
]
],
[
[
65370,
65370
],
"mapped",
[
122
]
],
[
[
65371,
65371
],
"disallowed_STD3_mapped",
[
123
]
],
[
[
65372,
65372
],
"disallowed_STD3_mapped",
[
124
]
],
[
[
65373,
65373
],
"disallowed_STD3_mapped",
[
125
]
],
[
[
65374,
65374
],
"disallowed_STD3_mapped",
[
126
]
],
[
[
65375,
65375
],
"mapped",
[
10629
]
],
[
[
65376,
65376
],
"mapped",
[
10630
]
],
[
[
65377,
65377
],
"mapped",
[
46
]
],
[
[
65378,
65378
],
"mapped",
[
12300
]
],
[
[
65379,
65379
],
"mapped",
[
12301
]
],
[
[
65380,
65380
],
"mapped",
[
12289
]
],
[
[
65381,
65381
],
"mapped",
[
12539
]
],
[
[
65382,
65382
],
"mapped",
[
12530
]
],
[
[
65383,
65383
],
"mapped",
[
12449
]
],
[
[
65384,
65384
],
"mapped",
[
12451
]
],
[
[
65385,
65385
],
"mapped",
[
12453
]
],
[
[
65386,
65386
],
"mapped",
[
12455
]
],
[
[
65387,
65387
],
"mapped",
[
12457
]
],
[
[
65388,
65388
],
"mapped",
[
12515
]
],
[
[
65389,
65389
],
"mapped",
[
12517
]
],
[
[
65390,
65390
],
"mapped",
[
12519
]
],
[
[
65391,
65391
],
"mapped",
[
12483
]
],
[
[
65392,
65392
],
"mapped",
[
12540
]
],
[
[
65393,
65393
],
"mapped",
[
12450
]
],
[
[
65394,
65394
],
"mapped",
[
12452
]
],
[
[
65395,
65395
],
"mapped",
[
12454
]
],
[
[
65396,
65396
],
"mapped",
[
12456
]
],
[
[
65397,
65397
],
"mapped",
[
12458
]
],
[
[
65398,
65398
],
"mapped",
[
12459
]
],
[
[
65399,
65399
],
"mapped",
[
12461
]
],
[
[
65400,
65400
],
"mapped",
[
12463
]
],
[
[
65401,
65401
],
"mapped",
[
12465
]
],
[
[
65402,
65402
],
"mapped",
[
12467
]
],
[
[
65403,
65403
],
"mapped",
[
12469
]
],
[
[
65404,
65404
],
"mapped",
[
12471
]
],
[
[
65405,
65405
],
"mapped",
[
12473
]
],
[
[
65406,
65406
],
"mapped",
[
12475
]
],
[
[
65407,
65407
],
"mapped",
[
12477
]
],
[
[
65408,
65408
],
"mapped",
[
12479
]
],
[
[
65409,
65409
],
"mapped",
[
12481
]
],
[
[
65410,
65410
],
"mapped",
[
12484
]
],
[
[
65411,
65411
],
"mapped",
[
12486
]
],
[
[
65412,
65412
],
"mapped",
[
12488
]
],
[
[
65413,
65413
],
"mapped",
[
12490
]
],
[
[
65414,
65414
],
"mapped",
[
12491
]
],
[
[
65415,
65415
],
"mapped",
[
12492
]
],
[
[
65416,
65416
],
"mapped",
[
12493
]
],
[
[
65417,
65417
],
"mapped",
[
12494
]
],
[
[
65418,
65418
],
"mapped",
[
12495
]
],
[
[
65419,
65419
],
"mapped",
[
12498
]
],
[
[
65420,
65420
],
"mapped",
[
12501
]
],
[
[
65421,
65421
],
"mapped",
[
12504
]
],
[
[
65422,
65422
],
"mapped",
[
12507
]
],
[
[
65423,
65423
],
"mapped",
[
12510
]
],
[
[
65424,
65424
],
"mapped",
[
12511
]
],
[
[
65425,
65425
],
"mapped",
[
12512
]
],
[
[
65426,
65426
],
"mapped",
[
12513
]
],
[
[
65427,
65427
],
"mapped",
[
12514
]
],
[
[
65428,
65428
],
"mapped",
[
12516
]
],
[
[
65429,
65429
],
"mapped",
[
12518
]
],
[
[
65430,
65430
],
"mapped",
[
12520
]
],
[
[
65431,
65431
],
"mapped",
[
12521
]
],
[
[
65432,
65432
],
"mapped",
[
12522
]
],
[
[
65433,
65433
],
"mapped",
[
12523
]
],
[
[
65434,
65434
],
"mapped",
[
12524
]
],
[
[
65435,
65435
],
"mapped",
[
12525
]
],
[
[
65436,
65436
],
"mapped",
[
12527
]
],
[
[
65437,
65437
],
"mapped",
[
12531
]
],
[
[
65438,
65438
],
"mapped",
[
12441
]
],
[
[
65439,
65439
],
"mapped",
[
12442
]
],
[
[
65440,
65440
],
"disallowed"
],
[
[
65441,
65441
],
"mapped",
[
4352
]
],
[
[
65442,
65442
],
"mapped",
[
4353
]
],
[
[
65443,
65443
],
"mapped",
[
4522
]
],
[
[
65444,
65444
],
"mapped",
[
4354
]
],
[
[
65445,
65445
],
"mapped",
[
4524
]
],
[
[
65446,
65446
],
"mapped",
[
4525
]
],
[
[
65447,
65447
],
"mapped",
[
4355
]
],
[
[
65448,
65448
],
"mapped",
[
4356
]
],
[
[
65449,
65449
],
"mapped",
[
4357
]
],
[
[
65450,
65450
],
"mapped",
[
4528
]
],
[
[
65451,
65451
],
"mapped",
[
4529
]
],
[
[
65452,
65452
],
"mapped",
[
4530
]
],
[
[
65453,
65453
],
"mapped",
[
4531
]
],
[
[
65454,
65454
],
"mapped",
[
4532
]
],
[
[
65455,
65455
],
"mapped",
[
4533
]
],
[
[
65456,
65456
],
"mapped",
[
4378
]
],
[
[
65457,
65457
],
"mapped",
[
4358
]
],
[
[
65458,
65458
],
"mapped",
[
4359
]
],
[
[
65459,
65459
],
"mapped",
[
4360
]
],
[
[
65460,
65460
],
"mapped",
[
4385
]
],
[
[
65461,
65461
],
"mapped",
[
4361
]
],
[
[
65462,
65462
],
"mapped",
[
4362
]
],
[
[
65463,
65463
],
"mapped",
[
4363
]
],
[
[
65464,
65464
],
"mapped",
[
4364
]
],
[
[
65465,
65465
],
"mapped",
[
4365
]
],
[
[
65466,
65466
],
"mapped",
[
4366
]
],
[
[
65467,
65467
],
"mapped",
[
4367
]
],
[
[
65468,
65468
],
"mapped",
[
4368
]
],
[
[
65469,
65469
],
"mapped",
[
4369
]
],
[
[
65470,
65470
],
"mapped",
[
4370
]
],
[
[
65471,
65473
],
"disallowed"
],
[
[
65474,
65474
],
"mapped",
[
4449
]
],
[
[
65475,
65475
],
"mapped",
[
4450
]
],
[
[
65476,
65476
],
"mapped",
[
4451
]
],
[
[
65477,
65477
],
"mapped",
[
4452
]
],
[
[
65478,
65478
],
"mapped",
[
4453
]
],
[
[
65479,
65479
],
"mapped",
[
4454
]
],
[
[
65480,
65481
],
"disallowed"
],
[
[
65482,
65482
],
"mapped",
[
4455
]
],
[
[
65483,
65483
],
"mapped",
[
4456
]
],
[
[
65484,
65484
],
"mapped",
[
4457
]
],
[
[
65485,
65485
],
"mapped",
[
4458
]
],
[
[
65486,
65486
],
"mapped",
[
4459
]
],
[
[
65487,
65487
],
"mapped",
[
4460
]
],
[
[
65488,
65489
],
"disallowed"
],
[
[
65490,
65490
],
"mapped",
[
4461
]
],
[
[
65491,
65491
],
"mapped",
[
4462
]
],
[
[
65492,
65492
],
"mapped",
[
4463
]
],
[
[
65493,
65493
],
"mapped",
[
4464
]
],
[
[
65494,
65494
],
"mapped",
[
4465
]
],
[
[
65495,
65495
],
"mapped",
[
4466
]
],
[
[
65496,
65497
],
"disallowed"
],
[
[
65498,
65498
],
"mapped",
[
4467
]
],
[
[
65499,
65499
],
"mapped",
[
4468
]
],
[
[
65500,
65500
],
"mapped",
[
4469
]
],
[
[
65501,
65503
],
"disallowed"
],
[
[
65504,
65504
],
"mapped",
[
162
]
],
[
[
65505,
65505
],
"mapped",
[
163
]
],
[
[
65506,
65506
],
"mapped",
[
172
]
],
[
[
65507,
65507
],
"disallowed_STD3_mapped",
[
32,
772
]
],
[
[
65508,
65508
],
"mapped",
[
166
]
],
[
[
65509,
65509
],
"mapped",
[
165
]
],
[
[
65510,
65510
],
"mapped",
[
8361
]
],
[
[
65511,
65511
],
"disallowed"
],
[
[
65512,
65512
],
"mapped",
[
9474
]
],
[
[
65513,
65513
],
"mapped",
[
8592
]
],
[
[
65514,
65514
],
"mapped",
[
8593
]
],
[
[
65515,
65515
],
"mapped",
[
8594
]
],
[
[
65516,
65516
],
"mapped",
[
8595
]
],
[
[
65517,
65517
],
"mapped",
[
9632
]
],
[
[
65518,
65518
],
"mapped",
[
9675
]
],
[
[
65519,
65528
],
"disallowed"
],
[
[
65529,
65531
],
"disallowed"
],
[
[
65532,
65532
],
"disallowed"
],
[
[
65533,
65533
],
"disallowed"
],
[
[
65534,
65535
],
"disallowed"
],
[
[
65536,
65547
],
"valid"
],
[
[
65548,
65548
],
"disallowed"
],
[
[
65549,
65574
],
"valid"
],
[
[
65575,
65575
],
"disallowed"
],
[
[
65576,
65594
],
"valid"
],
[
[
65595,
65595
],
"disallowed"
],
[
[
65596,
65597
],
"valid"
],
[
[
65598,
65598
],
"disallowed"
],
[
[
65599,
65613
],
"valid"
],
[
[
65614,
65615
],
"disallowed"
],
[
[
65616,
65629
],
"valid"
],
[
[
65630,
65663
],
"disallowed"
],
[
[
65664,
65786
],
"valid"
],
[
[
65787,
65791
],
"disallowed"
],
[
[
65792,
65794
],
"valid",
[
],
"NV8"
],
[
[
65795,
65798
],
"disallowed"
],
[
[
65799,
65843
],
"valid",
[
],
"NV8"
],
[
[
65844,
65846
],
"disallowed"
],
[
[
65847,
65855
],
"valid",
[
],
"NV8"
],
[
[
65856,
65930
],
"valid",
[
],
"NV8"
],
[
[
65931,
65932
],
"valid",
[
],
"NV8"
],
[
[
65933,
65935
],
"disallowed"
],
[
[
65936,
65947
],
"valid",
[
],
"NV8"
],
[
[
65948,
65951
],
"disallowed"
],
[
[
65952,
65952
],
"valid",
[
],
"NV8"
],
[
[
65953,
65999
],
"disallowed"
],
[
[
66000,
66044
],
"valid",
[
],
"NV8"
],
[
[
66045,
66045
],
"valid"
],
[
[
66046,
66175
],
"disallowed"
],
[
[
66176,
66204
],
"valid"
],
[
[
66205,
66207
],
"disallowed"
],
[
[
66208,
66256
],
"valid"
],
[
[
66257,
66271
],
"disallowed"
],
[
[
66272,
66272
],
"valid"
],
[
[
66273,
66299
],
"valid",
[
],
"NV8"
],
[
[
66300,
66303
],
"disallowed"
],
[
[
66304,
66334
],
"valid"
],
[
[
66335,
66335
],
"valid"
],
[
[
66336,
66339
],
"valid",
[
],
"NV8"
],
[
[
66340,
66351
],
"disallowed"
],
[
[
66352,
66368
],
"valid"
],
[
[
66369,
66369
],
"valid",
[
],
"NV8"
],
[
[
66370,
66377
],
"valid"
],
[
[
66378,
66378
],
"valid",
[
],
"NV8"
],
[
[
66379,
66383
],
"disallowed"
],
[
[
66384,
66426
],
"valid"
],
[
[
66427,
66431
],
"disallowed"
],
[
[
66432,
66461
],
"valid"
],
[
[
66462,
66462
],
"disallowed"
],
[
[
66463,
66463
],
"valid",
[
],
"NV8"
],
[
[
66464,
66499
],
"valid"
],
[
[
66500,
66503
],
"disallowed"
],
[
[
66504,
66511
],
"valid"
],
[
[
66512,
66517
],
"valid",
[
],
"NV8"
],
[
[
66518,
66559
],
"disallowed"
],
[
[
66560,
66560
],
"mapped",
[
66600
]
],
[
[
66561,
66561
],
"mapped",
[
66601
]
],
[
[
66562,
66562
],
"mapped",
[
66602
]
],
[
[
66563,
66563
],
"mapped",
[
66603
]
],
[
[
66564,
66564
],
"mapped",
[
66604
]
],
[
[
66565,
66565
],
"mapped",
[
66605
]
],
[
[
66566,
66566
],
"mapped",
[
66606
]
],
[
[
66567,
66567
],
"mapped",
[
66607
]
],
[
[
66568,
66568
],
"mapped",
[
66608
]
],
[
[
66569,
66569
],
"mapped",
[
66609
]
],
[
[
66570,
66570
],
"mapped",
[
66610
]
],
[
[
66571,
66571
],
"mapped",
[
66611
]
],
[
[
66572,
66572
],
"mapped",
[
66612
]
],
[
[
66573,
66573
],
"mapped",
[
66613
]
],
[
[
66574,
66574
],
"mapped",
[
66614
]
],
[
[
66575,
66575
],
"mapped",
[
66615
]
],
[
[
66576,
66576
],
"mapped",
[
66616
]
],
[
[
66577,
66577
],
"mapped",
[
66617
]
],
[
[
66578,
66578
],
"mapped",
[
66618
]
],
[
[
66579,
66579
],
"mapped",
[
66619
]
],
[
[
66580,
66580
],
"mapped",
[
66620
]
],
[
[
66581,
66581
],
"mapped",
[
66621
]
],
[
[
66582,
66582
],
"mapped",
[
66622
]
],
[
[
66583,
66583
],
"mapped",
[
66623
]
],
[
[
66584,
66584
],
"mapped",
[
66624
]
],
[
[
66585,
66585
],
"mapped",
[
66625
]
],
[
[
66586,
66586
],
"mapped",
[
66626
]
],
[
[
66587,
66587
],
"mapped",
[
66627
]
],
[
[
66588,
66588
],
"mapped",
[
66628
]
],
[
[
66589,
66589
],
"mapped",
[
66629
]
],
[
[
66590,
66590
],
"mapped",
[
66630
]
],
[
[
66591,
66591
],
"mapped",
[
66631
]
],
[
[
66592,
66592
],
"mapped",
[
66632
]
],
[
[
66593,
66593
],
"mapped",
[
66633
]
],
[
[
66594,
66594
],
"mapped",
[
66634
]
],
[
[
66595,
66595
],
"mapped",
[
66635
]
],
[
[
66596,
66596
],
"mapped",
[
66636
]
],
[
[
66597,
66597
],
"mapped",
[
66637
]
],
[
[
66598,
66598
],
"mapped",
[
66638
]
],
[
[
66599,
66599
],
"mapped",
[
66639
]
],
[
[
66600,
66637
],
"valid"
],
[
[
66638,
66717
],
"valid"
],
[
[
66718,
66719
],
"disallowed"
],
[
[
66720,
66729
],
"valid"
],
[
[
66730,
66815
],
"disallowed"
],
[
[
66816,
66855
],
"valid"
],
[
[
66856,
66863
],
"disallowed"
],
[
[
66864,
66915
],
"valid"
],
[
[
66916,
66926
],
"disallowed"
],
[
[
66927,
66927
],
"valid",
[
],
"NV8"
],
[
[
66928,
67071
],
"disallowed"
],
[
[
67072,
67382
],
"valid"
],
[
[
67383,
67391
],
"disallowed"
],
[
[
67392,
67413
],
"valid"
],
[
[
67414,
67423
],
"disallowed"
],
[
[
67424,
67431
],
"valid"
],
[
[
67432,
67583
],
"disallowed"
],
[
[
67584,
67589
],
"valid"
],
[
[
67590,
67591
],
"disallowed"
],
[
[
67592,
67592
],
"valid"
],
[
[
67593,
67593
],
"disallowed"
],
[
[
67594,
67637
],
"valid"
],
[
[
67638,
67638
],
"disallowed"
],
[
[
67639,
67640
],
"valid"
],
[
[
67641,
67643
],
"disallowed"
],
[
[
67644,
67644
],
"valid"
],
[
[
67645,
67646
],
"disallowed"
],
[
[
67647,
67647
],
"valid"
],
[
[
67648,
67669
],
"valid"
],
[
[
67670,
67670
],
"disallowed"
],
[
[
67671,
67679
],
"valid",
[
],
"NV8"
],
[
[
67680,
67702
],
"valid"
],
[
[
67703,
67711
],
"valid",
[
],
"NV8"
],
[
[
67712,
67742
],
"valid"
],
[
[
67743,
67750
],
"disallowed"
],
[
[
67751,
67759
],
"valid",
[
],
"NV8"
],
[
[
67760,
67807
],
"disallowed"
],
[
[
67808,
67826
],
"valid"
],
[
[
67827,
67827
],
"disallowed"
],
[
[
67828,
67829
],
"valid"
],
[
[
67830,
67834
],
"disallowed"
],
[
[
67835,
67839
],
"valid",
[
],
"NV8"
],
[
[
67840,
67861
],
"valid"
],
[
[
67862,
67865
],
"valid",
[
],
"NV8"
],
[
[
67866,
67867
],
"valid",
[
],
"NV8"
],
[
[
67868,
67870
],
"disallowed"
],
[
[
67871,
67871
],
"valid",
[
],
"NV8"
],
[
[
67872,
67897
],
"valid"
],
[
[
67898,
67902
],
"disallowed"
],
[
[
67903,
67903
],
"valid",
[
],
"NV8"
],
[
[
67904,
67967
],
"disallowed"
],
[
[
67968,
68023
],
"valid"
],
[
[
68024,
68027
],
"disallowed"
],
[
[
68028,
68029
],
"valid",
[
],
"NV8"
],
[
[
68030,
68031
],
"valid"
],
[
[
68032,
68047
],
"valid",
[
],
"NV8"
],
[
[
68048,
68049
],
"disallowed"
],
[
[
68050,
68095
],
"valid",
[
],
"NV8"
],
[
[
68096,
68099
],
"valid"
],
[
[
68100,
68100
],
"disallowed"
],
[
[
68101,
68102
],
"valid"
],
[
[
68103,
68107
],
"disallowed"
],
[
[
68108,
68115
],
"valid"
],
[
[
68116,
68116
],
"disallowed"
],
[
[
68117,
68119
],
"valid"
],
[
[
68120,
68120
],
"disallowed"
],
[
[
68121,
68147
],
"valid"
],
[
[
68148,
68151
],
"disallowed"
],
[
[
68152,
68154
],
"valid"
],
[
[
68155,
68158
],
"disallowed"
],
[
[
68159,
68159
],
"valid"
],
[
[
68160,
68167
],
"valid",
[
],
"NV8"
],
[
[
68168,
68175
],
"disallowed"
],
[
[
68176,
68184
],
"valid",
[
],
"NV8"
],
[
[
68185,
68191
],
"disallowed"
],
[
[
68192,
68220
],
"valid"
],
[
[
68221,
68223
],
"valid",
[
],
"NV8"
],
[
[
68224,
68252
],
"valid"
],
[
[
68253,
68255
],
"valid",
[
],
"NV8"
],
[
[
68256,
68287
],
"disallowed"
],
[
[
68288,
68295
],
"valid"
],
[
[
68296,
68296
],
"valid",
[
],
"NV8"
],
[
[
68297,
68326
],
"valid"
],
[
[
68327,
68330
],
"disallowed"
],
[
[
68331,
68342
],
"valid",
[
],
"NV8"
],
[
[
68343,
68351
],
"disallowed"
],
[
[
68352,
68405
],
"valid"
],
[
[
68406,
68408
],
"disallowed"
],
[
[
68409,
68415
],
"valid",
[
],
"NV8"
],
[
[
68416,
68437
],
"valid"
],
[
[
68438,
68439
],
"disallowed"
],
[
[
68440,
68447
],
"valid",
[
],
"NV8"
],
[
[
68448,
68466
],
"valid"
],
[
[
68467,
68471
],
"disallowed"
],
[
[
68472,
68479
],
"valid",
[
],
"NV8"
],
[
[
68480,
68497
],
"valid"
],
[
[
68498,
68504
],
"disallowed"
],
[
[
68505,
68508
],
"valid",
[
],
"NV8"
],
[
[
68509,
68520
],
"disallowed"
],
[
[
68521,
68527
],
"valid",
[
],
"NV8"
],
[
[
68528,
68607
],
"disallowed"
],
[
[
68608,
68680
],
"valid"
],
[
[
68681,
68735
],
"disallowed"
],
[
[
68736,
68736
],
"mapped",
[
68800
]
],
[
[
68737,
68737
],
"mapped",
[
68801
]
],
[
[
68738,
68738
],
"mapped",
[
68802
]
],
[
[
68739,
68739
],
"mapped",
[
68803
]
],
[
[
68740,
68740
],
"mapped",
[
68804
]
],
[
[
68741,
68741
],
"mapped",
[
68805
]
],
[
[
68742,
68742
],
"mapped",
[
68806
]
],
[
[
68743,
68743
],
"mapped",
[
68807
]
],
[
[
68744,
68744
],
"mapped",
[
68808
]
],
[
[
68745,
68745
],
"mapped",
[
68809
]
],
[
[
68746,
68746
],
"mapped",
[
68810
]
],
[
[
68747,
68747
],
"mapped",
[
68811
]
],
[
[
68748,
68748
],
"mapped",
[
68812
]
],
[
[
68749,
68749
],
"mapped",
[
68813
]
],
[
[
68750,
68750
],
"mapped",
[
68814
]
],
[
[
68751,
68751
],
"mapped",
[
68815
]
],
[
[
68752,
68752
],
"mapped",
[
68816
]
],
[
[
68753,
68753
],
"mapped",
[
68817
]
],
[
[
68754,
68754
],
"mapped",
[
68818
]
],
[
[
68755,
68755
],
"mapped",
[
68819
]
],
[
[
68756,
68756
],
"mapped",
[
68820
]
],
[
[
68757,
68757
],
"mapped",
[
68821
]
],
[
[
68758,
68758
],
"mapped",
[
68822
]
],
[
[
68759,
68759
],
"mapped",
[
68823
]
],
[
[
68760,
68760
],
"mapped",
[
68824
]
],
[
[
68761,
68761
],
"mapped",
[
68825
]
],
[
[
68762,
68762
],
"mapped",
[
68826
]
],
[
[
68763,
68763
],
"mapped",
[
68827
]
],
[
[
68764,
68764
],
"mapped",
[
68828
]
],
[
[
68765,
68765
],
"mapped",
[
68829
]
],
[
[
68766,
68766
],
"mapped",
[
68830
]
],
[
[
68767,
68767
],
"mapped",
[
68831
]
],
[
[
68768,
68768
],
"mapped",
[
68832
]
],
[
[
68769,
68769
],
"mapped",
[
68833
]
],
[
[
68770,
68770
],
"mapped",
[
68834
]
],
[
[
68771,
68771
],
"mapped",
[
68835
]
],
[
[
68772,
68772
],
"mapped",
[
68836
]
],
[
[
68773,
68773
],
"mapped",
[
68837
]
],
[
[
68774,
68774
],
"mapped",
[
68838
]
],
[
[
68775,
68775
],
"mapped",
[
68839
]
],
[
[
68776,
68776
],
"mapped",
[
68840
]
],
[
[
68777,
68777
],
"mapped",
[
68841
]
],
[
[
68778,
68778
],
"mapped",
[
68842
]
],
[
[
68779,
68779
],
"mapped",
[
68843
]
],
[
[
68780,
68780
],
"mapped",
[
68844
]
],
[
[
68781,
68781
],
"mapped",
[
68845
]
],
[
[
68782,
68782
],
"mapped",
[
68846
]
],
[
[
68783,
68783
],
"mapped",
[
68847
]
],
[
[
68784,
68784
],
"mapped",
[
68848
]
],
[
[
68785,
68785
],
"mapped",
[
68849
]
],
[
[
68786,
68786
],
"mapped",
[
68850
]
],
[
[
68787,
68799
],
"disallowed"
],
[
[
68800,
68850
],
"valid"
],
[
[
68851,
68857
],
"disallowed"
],
[
[
68858,
68863
],
"valid",
[
],
"NV8"
],
[
[
68864,
69215
],
"disallowed"
],
[
[
69216,
69246
],
"valid",
[
],
"NV8"
],
[
[
69247,
69631
],
"disallowed"
],
[
[
69632,
69702
],
"valid"
],
[
[
69703,
69709
],
"valid",
[
],
"NV8"
],
[
[
69710,
69713
],
"disallowed"
],
[
[
69714,
69733
],
"valid",
[
],
"NV8"
],
[
[
69734,
69743
],
"valid"
],
[
[
69744,
69758
],
"disallowed"
],
[
[
69759,
69759
],
"valid"
],
[
[
69760,
69818
],
"valid"
],
[
[
69819,
69820
],
"valid",
[
],
"NV8"
],
[
[
69821,
69821
],
"disallowed"
],
[
[
69822,
69825
],
"valid",
[
],
"NV8"
],
[
[
69826,
69839
],
"disallowed"
],
[
[
69840,
69864
],
"valid"
],
[
[
69865,
69871
],
"disallowed"
],
[
[
69872,
69881
],
"valid"
],
[
[
69882,
69887
],
"disallowed"
],
[
[
69888,
69940
],
"valid"
],
[
[
69941,
69941
],
"disallowed"
],
[
[
69942,
69951
],
"valid"
],
[
[
69952,
69955
],
"valid",
[
],
"NV8"
],
[
[
69956,
69967
],
"disallowed"
],
[
[
69968,
70003
],
"valid"
],
[
[
70004,
70005
],
"valid",
[
],
"NV8"
],
[
[
70006,
70006
],
"valid"
],
[
[
70007,
70015
],
"disallowed"
],
[
[
70016,
70084
],
"valid"
],
[
[
70085,
70088
],
"valid",
[
],
"NV8"
],
[
[
70089,
70089
],
"valid",
[
],
"NV8"
],
[
[
70090,
70092
],
"valid"
],
[
[
70093,
70093
],
"valid",
[
],
"NV8"
],
[
[
70094,
70095
],
"disallowed"
],
[
[
70096,
70105
],
"valid"
],
[
[
70106,
70106
],
"valid"
],
[
[
70107,
70107
],
"valid",
[
],
"NV8"
],
[
[
70108,
70108
],
"valid"
],
[
[
70109,
70111
],
"valid",
[
],
"NV8"
],
[
[
70112,
70112
],
"disallowed"
],
[
[
70113,
70132
],
"valid",
[
],
"NV8"
],
[
[
70133,
70143
],
"disallowed"
],
[
[
70144,
70161
],
"valid"
],
[
[
70162,
70162
],
"disallowed"
],
[
[
70163,
70199
],
"valid"
],
[
[
70200,
70205
],
"valid",
[
],
"NV8"
],
[
[
70206,
70271
],
"disallowed"
],
[
[
70272,
70278
],
"valid"
],
[
[
70279,
70279
],
"disallowed"
],
[
[
70280,
70280
],
"valid"
],
[
[
70281,
70281
],
"disallowed"
],
[
[
70282,
70285
],
"valid"
],
[
[
70286,
70286
],
"disallowed"
],
[
[
70287,
70301
],
"valid"
],
[
[
70302,
70302
],
"disallowed"
],
[
[
70303,
70312
],
"valid"
],
[
[
70313,
70313
],
"valid",
[
],
"NV8"
],
[
[
70314,
70319
],
"disallowed"
],
[
[
70320,
70378
],
"valid"
],
[
[
70379,
70383
],
"disallowed"
],
[
[
70384,
70393
],
"valid"
],
[
[
70394,
70399
],
"disallowed"
],
[
[
70400,
70400
],
"valid"
],
[
[
70401,
70403
],
"valid"
],
[
[
70404,
70404
],
"disallowed"
],
[
[
70405,
70412
],
"valid"
],
[
[
70413,
70414
],
"disallowed"
],
[
[
70415,
70416
],
"valid"
],
[
[
70417,
70418
],
"disallowed"
],
[
[
70419,
70440
],
"valid"
],
[
[
70441,
70441
],
"disallowed"
],
[
[
70442,
70448
],
"valid"
],
[
[
70449,
70449
],
"disallowed"
],
[
[
70450,
70451
],
"valid"
],
[
[
70452,
70452
],
"disallowed"
],
[
[
70453,
70457
],
"valid"
],
[
[
70458,
70459
],
"disallowed"
],
[
[
70460,
70468
],
"valid"
],
[
[
70469,
70470
],
"disallowed"
],
[
[
70471,
70472
],
"valid"
],
[
[
70473,
70474
],
"disallowed"
],
[
[
70475,
70477
],
"valid"
],
[
[
70478,
70479
],
"disallowed"
],
[
[
70480,
70480
],
"valid"
],
[
[
70481,
70486
],
"disallowed"
],
[
[
70487,
70487
],
"valid"
],
[
[
70488,
70492
],
"disallowed"
],
[
[
70493,
70499
],
"valid"
],
[
[
70500,
70501
],
"disallowed"
],
[
[
70502,
70508
],
"valid"
],
[
[
70509,
70511
],
"disallowed"
],
[
[
70512,
70516
],
"valid"
],
[
[
70517,
70783
],
"disallowed"
],
[
[
70784,
70853
],
"valid"
],
[
[
70854,
70854
],
"valid",
[
],
"NV8"
],
[
[
70855,
70855
],
"valid"
],
[
[
70856,
70863
],
"disallowed"
],
[
[
70864,
70873
],
"valid"
],
[
[
70874,
71039
],
"disallowed"
],
[
[
71040,
71093
],
"valid"
],
[
[
71094,
71095
],
"disallowed"
],
[
[
71096,
71104
],
"valid"
],
[
[
71105,
71113
],
"valid",
[
],
"NV8"
],
[
[
71114,
71127
],
"valid",
[
],
"NV8"
],
[
[
71128,
71133
],
"valid"
],
[
[
71134,
71167
],
"disallowed"
],
[
[
71168,
71232
],
"valid"
],
[
[
71233,
71235
],
"valid",
[
],
"NV8"
],
[
[
71236,
71236
],
"valid"
],
[
[
71237,
71247
],
"disallowed"
],
[
[
71248,
71257
],
"valid"
],
[
[
71258,
71295
],
"disallowed"
],
[
[
71296,
71351
],
"valid"
],
[
[
71352,
71359
],
"disallowed"
],
[
[
71360,
71369
],
"valid"
],
[
[
71370,
71423
],
"disallowed"
],
[
[
71424,
71449
],
"valid"
],
[
[
71450,
71452
],
"disallowed"
],
[
[
71453,
71467
],
"valid"
],
[
[
71468,
71471
],
"disallowed"
],
[
[
71472,
71481
],
"valid"
],
[
[
71482,
71487
],
"valid",
[
],
"NV8"
],
[
[
71488,
71839
],
"disallowed"
],
[
[
71840,
71840
],
"mapped",
[
71872
]
],
[
[
71841,
71841
],
"mapped",
[
71873
]
],
[
[
71842,
71842
],
"mapped",
[
71874
]
],
[
[
71843,
71843
],
"mapped",
[
71875
]
],
[
[
71844,
71844
],
"mapped",
[
71876
]
],
[
[
71845,
71845
],
"mapped",
[
71877
]
],
[
[
71846,
71846
],
"mapped",
[
71878
]
],
[
[
71847,
71847
],
"mapped",
[
71879
]
],
[
[
71848,
71848
],
"mapped",
[
71880
]
],
[
[
71849,
71849
],
"mapped",
[
71881
]
],
[
[
71850,
71850
],
"mapped",
[
71882
]
],
[
[
71851,
71851
],
"mapped",
[
71883
]
],
[
[
71852,
71852
],
"mapped",
[
71884
]
],
[
[
71853,
71853
],
"mapped",
[
71885
]
],
[
[
71854,
71854
],
"mapped",
[
71886
]
],
[
[
71855,
71855
],
"mapped",
[
71887
]
],
[
[
71856,
71856
],
"mapped",
[
71888
]
],
[
[
71857,
71857
],
"mapped",
[
71889
]
],
[
[
71858,
71858
],
"mapped",
[
71890
]
],
[
[
71859,
71859
],
"mapped",
[
71891
]
],
[
[
71860,
71860
],
"mapped",
[
71892
]
],
[
[
71861,
71861
],
"mapped",
[
71893
]
],
[
[
71862,
71862
],
"mapped",
[
71894
]
],
[
[
71863,
71863
],
"mapped",
[
71895
]
],
[
[
71864,
71864
],
"mapped",
[
71896
]
],
[
[
71865,
71865
],
"mapped",
[
71897
]
],
[
[
71866,
71866
],
"mapped",
[
71898
]
],
[
[
71867,
71867
],
"mapped",
[
71899
]
],
[
[
71868,
71868
],
"mapped",
[
71900
]
],
[
[
71869,
71869
],
"mapped",
[
71901
]
],
[
[
71870,
71870
],
"mapped",
[
71902
]
],
[
[
71871,
71871
],
"mapped",
[
71903
]
],
[
[
71872,
71913
],
"valid"
],
[
[
71914,
71922
],
"valid",
[
],
"NV8"
],
[
[
71923,
71934
],
"disallowed"
],
[
[
71935,
71935
],
"valid"
],
[
[
71936,
72383
],
"disallowed"
],
[
[
72384,
72440
],
"valid"
],
[
[
72441,
73727
],
"disallowed"
],
[
[
73728,
74606
],
"valid"
],
[
[
74607,
74648
],
"valid"
],
[
[
74649,
74649
],
"valid"
],
[
[
74650,
74751
],
"disallowed"
],
[
[
74752,
74850
],
"valid",
[
],
"NV8"
],
[
[
74851,
74862
],
"valid",
[
],
"NV8"
],
[
[
74863,
74863
],
"disallowed"
],
[
[
74864,
74867
],
"valid",
[
],
"NV8"
],
[
[
74868,
74868
],
"valid",
[
],
"NV8"
],
[
[
74869,
74879
],
"disallowed"
],
[
[
74880,
75075
],
"valid"
],
[
[
75076,
77823
],
"disallowed"
],
[
[
77824,
78894
],
"valid"
],
[
[
78895,
82943
],
"disallowed"
],
[
[
82944,
83526
],
"valid"
],
[
[
83527,
92159
],
"disallowed"
],
[
[
92160,
92728
],
"valid"
],
[
[
92729,
92735
],
"disallowed"
],
[
[
92736,
92766
],
"valid"
],
[
[
92767,
92767
],
"disallowed"
],
[
[
92768,
92777
],
"valid"
],
[
[
92778,
92781
],
"disallowed"
],
[
[
92782,
92783
],
"valid",
[
],
"NV8"
],
[
[
92784,
92879
],
"disallowed"
],
[
[
92880,
92909
],
"valid"
],
[
[
92910,
92911
],
"disallowed"
],
[
[
92912,
92916
],
"valid"
],
[
[
92917,
92917
],
"valid",
[
],
"NV8"
],
[
[
92918,
92927
],
"disallowed"
],
[
[
92928,
92982
],
"valid"
],
[
[
92983,
92991
],
"valid",
[
],
"NV8"
],
[
[
92992,
92995
],
"valid"
],
[
[
92996,
92997
],
"valid",
[
],
"NV8"
],
[
[
92998,
93007
],
"disallowed"
],
[
[
93008,
93017
],
"valid"
],
[
[
93018,
93018
],
"disallowed"
],
[
[
93019,
93025
],
"valid",
[
],
"NV8"
],
[
[
93026,
93026
],
"disallowed"
],
[
[
93027,
93047
],
"valid"
],
[
[
93048,
93052
],
"disallowed"
],
[
[
93053,
93071
],
"valid"
],
[
[
93072,
93951
],
"disallowed"
],
[
[
93952,
94020
],
"valid"
],
[
[
94021,
94031
],
"disallowed"
],
[
[
94032,
94078
],
"valid"
],
[
[
94079,
94094
],
"disallowed"
],
[
[
94095,
94111
],
"valid"
],
[
[
94112,
110591
],
"disallowed"
],
[
[
110592,
110593
],
"valid"
],
[
[
110594,
113663
],
"disallowed"
],
[
[
113664,
113770
],
"valid"
],
[
[
113771,
113775
],
"disallowed"
],
[
[
113776,
113788
],
"valid"
],
[
[
113789,
113791
],
"disallowed"
],
[
[
113792,
113800
],
"valid"
],
[
[
113801,
113807
],
"disallowed"
],
[
[
113808,
113817
],
"valid"
],
[
[
113818,
113819
],
"disallowed"
],
[
[
113820,
113820
],
"valid",
[
],
"NV8"
],
[
[
113821,
113822
],
"valid"
],
[
[
113823,
113823
],
"valid",
[
],
"NV8"
],
[
[
113824,
113827
],
"ignored"
],
[
[
113828,
118783
],
"disallowed"
],
[
[
118784,
119029
],
"valid",
[
],
"NV8"
],
[
[
119030,
119039
],
"disallowed"
],
[
[
119040,
119078
],
"valid",
[
],
"NV8"
],
[
[
119079,
119080
],
"disallowed"
],
[
[
119081,
119081
],
"valid",
[
],
"NV8"
],
[
[
119082,
119133
],
"valid",
[
],
"NV8"
],
[
[
119134,
119134
],
"mapped",
[
119127,
119141
]
],
[
[
119135,
119135
],
"mapped",
[
119128,
119141
]
],
[
[
119136,
119136
],
"mapped",
[
119128,
119141,
119150
]
],
[
[
119137,
119137
],
"mapped",
[
119128,
119141,
119151
]
],
[
[
119138,
119138
],
"mapped",
[
119128,
119141,
119152
]
],
[
[
119139,
119139
],
"mapped",
[
119128,
119141,
119153
]
],
[
[
119140,
119140
],
"mapped",
[
119128,
119141,
119154
]
],
[
[
119141,
119154
],
"valid",
[
],
"NV8"
],
[
[
119155,
119162
],
"disallowed"
],
[
[
119163,
119226
],
"valid",
[
],
"NV8"
],
[
[
119227,
119227
],
"mapped",
[
119225,
119141
]
],
[
[
119228,
119228
],
"mapped",
[
119226,
119141
]
],
[
[
119229,
119229
],
"mapped",
[
119225,
119141,
119150
]
],
[
[
119230,
119230
],
"mapped",
[
119226,
119141,
119150
]
],
[
[
119231,
119231
],
"mapped",
[
119225,
119141,
119151
]
],
[
[
119232,
119232
],
"mapped",
[
119226,
119141,
119151
]
],
[
[
119233,
119261
],
"valid",
[
],
"NV8"
],
[
[
119262,
119272
],
"valid",
[
],
"NV8"
],
[
[
119273,
119295
],
"disallowed"
],
[
[
119296,
119365
],
"valid",
[
],
"NV8"
],
[
[
119366,
119551
],
"disallowed"
],
[
[
119552,
119638
],
"valid",
[
],
"NV8"
],
[
[
119639,
119647
],
"disallowed"
],
[
[
119648,
119665
],
"valid",
[
],
"NV8"
],
[
[
119666,
119807
],
"disallowed"
],
[
[
119808,
119808
],
"mapped",
[
97
]
],
[
[
119809,
119809
],
"mapped",
[
98
]
],
[
[
119810,
119810
],
"mapped",
[
99
]
],
[
[
119811,
119811
],
"mapped",
[
100
]
],
[
[
119812,
119812
],
"mapped",
[
101
]
],
[
[
119813,
119813
],
"mapped",
[
102
]
],
[
[
119814,
119814
],
"mapped",
[
103
]
],
[
[
119815,
119815
],
"mapped",
[
104
]
],
[
[
119816,
119816
],
"mapped",
[
105
]
],
[
[
119817,
119817
],
"mapped",
[
106
]
],
[
[
119818,
119818
],
"mapped",
[
107
]
],
[
[
119819,
119819
],
"mapped",
[
108
]
],
[
[
119820,
119820
],
"mapped",
[
109
]
],
[
[
119821,
119821
],
"mapped",
[
110
]
],
[
[
119822,
119822
],
"mapped",
[
111
]
],
[
[
119823,
119823
],
"mapped",
[
112
]
],
[
[
119824,
119824
],
"mapped",
[
113
]
],
[
[
119825,
119825
],
"mapped",
[
114
]
],
[
[
119826,
119826
],
"mapped",
[
115
]
],
[
[
119827,
119827
],
"mapped",
[
116
]
],
[
[
119828,
119828
],
"mapped",
[
117
]
],
[
[
119829,
119829
],
"mapped",
[
118
]
],
[
[
119830,
119830
],
"mapped",
[
119
]
],
[
[
119831,
119831
],
"mapped",
[
120
]
],
[
[
119832,
119832
],
"mapped",
[
121
]
],
[
[
119833,
119833
],
"mapped",
[
122
]
],
[
[
119834,
119834
],
"mapped",
[
97
]
],
[
[
119835,
119835
],
"mapped",
[
98
]
],
[
[
119836,
119836
],
"mapped",
[
99
]
],
[
[
119837,
119837
],
"mapped",
[
100
]
],
[
[
119838,
119838
],
"mapped",
[
101
]
],
[
[
119839,
119839
],
"mapped",
[
102
]
],
[
[
119840,
119840
],
"mapped",
[
103
]
],
[
[
119841,
119841
],
"mapped",
[
104
]
],
[
[
119842,
119842
],
"mapped",
[
105
]
],
[
[
119843,
119843
],
"mapped",
[
106
]
],
[
[
119844,
119844
],
"mapped",
[
107
]
],
[
[
119845,
119845
],
"mapped",
[
108
]
],
[
[
119846,
119846
],
"mapped",
[
109
]
],
[
[
119847,
119847
],
"mapped",
[
110
]
],
[
[
119848,
119848
],
"mapped",
[
111
]
],
[
[
119849,
119849
],
"mapped",
[
112
]
],
[
[
119850,
119850
],
"mapped",
[
113
]
],
[
[
119851,
119851
],
"mapped",
[
114
]
],
[
[
119852,
119852
],
"mapped",
[
115
]
],
[
[
119853,
119853
],
"mapped",
[
116
]
],
[
[
119854,
119854
],
"mapped",
[
117
]
],
[
[
119855,
119855
],
"mapped",
[
118
]
],
[
[
119856,
119856
],
"mapped",
[
119
]
],
[
[
119857,
119857
],
"mapped",
[
120
]
],
[
[
119858,
119858
],
"mapped",
[
121
]
],
[
[
119859,
119859
],
"mapped",
[
122
]
],
[
[
119860,
119860
],
"mapped",
[
97
]
],
[
[
119861,
119861
],
"mapped",
[
98
]
],
[
[
119862,
119862
],
"mapped",
[
99
]
],
[
[
119863,
119863
],
"mapped",
[
100
]
],
[
[
119864,
119864
],
"mapped",
[
101
]
],
[
[
119865,
119865
],
"mapped",
[
102
]
],
[
[
119866,
119866
],
"mapped",
[
103
]
],
[
[
119867,
119867
],
"mapped",
[
104
]
],
[
[
119868,
119868
],
"mapped",
[
105
]
],
[
[
119869,
119869
],
"mapped",
[
106
]
],
[
[
119870,
119870
],
"mapped",
[
107
]
],
[
[
119871,
119871
],
"mapped",
[
108
]
],
[
[
119872,
119872
],
"mapped",
[
109
]
],
[
[
119873,
119873
],
"mapped",
[
110
]
],
[
[
119874,
119874
],
"mapped",
[
111
]
],
[
[
119875,
119875
],
"mapped",
[
112
]
],
[
[
119876,
119876
],
"mapped",
[
113
]
],
[
[
119877,
119877
],
"mapped",
[
114
]
],
[
[
119878,
119878
],
"mapped",
[
115
]
],
[
[
119879,
119879
],
"mapped",
[
116
]
],
[
[
119880,
119880
],
"mapped",
[
117
]
],
[
[
119881,
119881
],
"mapped",
[
118
]
],
[
[
119882,
119882
],
"mapped",
[
119
]
],
[
[
119883,
119883
],
"mapped",
[
120
]
],
[
[
119884,
119884
],
"mapped",
[
121
]
],
[
[
119885,
119885
],
"mapped",
[
122
]
],
[
[
119886,
119886
],
"mapped",
[
97
]
],
[
[
119887,
119887
],
"mapped",
[
98
]
],
[
[
119888,
119888
],
"mapped",
[
99
]
],
[
[
119889,
119889
],
"mapped",
[
100
]
],
[
[
119890,
119890
],
"mapped",
[
101
]
],
[
[
119891,
119891
],
"mapped",
[
102
]
],
[
[
119892,
119892
],
"mapped",
[
103
]
],
[
[
119893,
119893
],
"disallowed"
],
[
[
119894,
119894
],
"mapped",
[
105
]
],
[
[
119895,
119895
],
"mapped",
[
106
]
],
[
[
119896,
119896
],
"mapped",
[
107
]
],
[
[
119897,
119897
],
"mapped",
[
108
]
],
[
[
119898,
119898
],
"mapped",
[
109
]
],
[
[
119899,
119899
],
"mapped",
[
110
]
],
[
[
119900,
119900
],
"mapped",
[
111
]
],
[
[
119901,
119901
],
"mapped",
[
112
]
],
[
[
119902,
119902
],
"mapped",
[
113
]
],
[
[
119903,
119903
],
"mapped",
[
114
]
],
[
[
119904,
119904
],
"mapped",
[
115
]
],
[
[
119905,
119905
],
"mapped",
[
116
]
],
[
[
119906,
119906
],
"mapped",
[
117
]
],
[
[
119907,
119907
],
"mapped",
[
118
]
],
[
[
119908,
119908
],
"mapped",
[
119
]
],
[
[
119909,
119909
],
"mapped",
[
120
]
],
[
[
119910,
119910
],
"mapped",
[
121
]
],
[
[
119911,
119911
],
"mapped",
[
122
]
],
[
[
119912,
119912
],
"mapped",
[
97
]
],
[
[
119913,
119913
],
"mapped",
[
98
]
],
[
[
119914,
119914
],
"mapped",
[
99
]
],
[
[
119915,
119915
],
"mapped",
[
100
]
],
[
[
119916,
119916
],
"mapped",
[
101
]
],
[
[
119917,
119917
],
"mapped",
[
102
]
],
[
[
119918,
119918
],
"mapped",
[
103
]
],
[
[
119919,
119919
],
"mapped",
[
104
]
],
[
[
119920,
119920
],
"mapped",
[
105
]
],
[
[
119921,
119921
],
"mapped",
[
106
]
],
[
[
119922,
119922
],
"mapped",
[
107
]
],
[
[
119923,
119923
],
"mapped",
[
108
]
],
[
[
119924,
119924
],
"mapped",
[
109
]
],
[
[
119925,
119925
],
"mapped",
[
110
]
],
[
[
119926,
119926
],
"mapped",
[
111
]
],
[
[
119927,
119927
],
"mapped",
[
112
]
],
[
[
119928,
119928
],
"mapped",
[
113
]
],
[
[
119929,
119929
],
"mapped",
[
114
]
],
[
[
119930,
119930
],
"mapped",
[
115
]
],
[
[
119931,
119931
],
"mapped",
[
116
]
],
[
[
119932,
119932
],
"mapped",
[
117
]
],
[
[
119933,
119933
],
"mapped",
[
118
]
],
[
[
119934,
119934
],
"mapped",
[
119
]
],
[
[
119935,
119935
],
"mapped",
[
120
]
],
[
[
119936,
119936
],
"mapped",
[
121
]
],
[
[
119937,
119937
],
"mapped",
[
122
]
],
[
[
119938,
119938
],
"mapped",
[
97
]
],
[
[
119939,
119939
],
"mapped",
[
98
]
],
[
[
119940,
119940
],
"mapped",
[
99
]
],
[
[
119941,
119941
],
"mapped",
[
100
]
],
[
[
119942,
119942
],
"mapped",
[
101
]
],
[
[
119943,
119943
],
"mapped",
[
102
]
],
[
[
119944,
119944
],
"mapped",
[
103
]
],
[
[
119945,
119945
],
"mapped",
[
104
]
],
[
[
119946,
119946
],
"mapped",
[
105
]
],
[
[
119947,
119947
],
"mapped",
[
106
]
],
[
[
119948,
119948
],
"mapped",
[
107
]
],
[
[
119949,
119949
],
"mapped",
[
108
]
],
[
[
119950,
119950
],
"mapped",
[
109
]
],
[
[
119951,
119951
],
"mapped",
[
110
]
],
[
[
119952,
119952
],
"mapped",
[
111
]
],
[
[
119953,
119953
],
"mapped",
[
112
]
],
[
[
119954,
119954
],
"mapped",
[
113
]
],
[
[
119955,
119955
],
"mapped",
[
114
]
],
[
[
119956,
119956
],
"mapped",
[
115
]
],
[
[
119957,
119957
],
"mapped",
[
116
]
],
[
[
119958,
119958
],
"mapped",
[
117
]
],
[
[
119959,
119959
],
"mapped",
[
118
]
],
[
[
119960,
119960
],
"mapped",
[
119
]
],
[
[
119961,
119961
],
"mapped",
[
120
]
],
[
[
119962,
119962
],
"mapped",
[
121
]
],
[
[
119963,
119963
],
"mapped",
[
122
]
],
[
[
119964,
119964
],
"mapped",
[
97
]
],
[
[
119965,
119965
],
"disallowed"
],
[
[
119966,
119966
],
"mapped",
[
99
]
],
[
[
119967,
119967
],
"mapped",
[
100
]
],
[
[
119968,
119969
],
"disallowed"
],
[
[
119970,
119970
],
"mapped",
[
103
]
],
[
[
119971,
119972
],
"disallowed"
],
[
[
119973,
119973
],
"mapped",
[
106
]
],
[
[
119974,
119974
],
"mapped",
[
107
]
],
[
[
119975,
119976
],
"disallowed"
],
[
[
119977,
119977
],
"mapped",
[
110
]
],
[
[
119978,
119978
],
"mapped",
[
111
]
],
[
[
119979,
119979
],
"mapped",
[
112
]
],
[
[
119980,
119980
],
"mapped",
[
113
]
],
[
[
119981,
119981
],
"disallowed"
],
[
[
119982,
119982
],
"mapped",
[
115
]
],
[
[
119983,
119983
],
"mapped",
[
116
]
],
[
[
119984,
119984
],
"mapped",
[
117
]
],
[
[
119985,
119985
],
"mapped",
[
118
]
],
[
[
119986,
119986
],
"mapped",
[
119
]
],
[
[
119987,
119987
],
"mapped",
[
120
]
],
[
[
119988,
119988
],
"mapped",
[
121
]
],
[
[
119989,
119989
],
"mapped",
[
122
]
],
[
[
119990,
119990
],
"mapped",
[
97
]
],
[
[
119991,
119991
],
"mapped",
[
98
]
],
[
[
119992,
119992
],
"mapped",
[
99
]
],
[
[
119993,
119993
],
"mapped",
[
100
]
],
[
[
119994,
119994
],
"disallowed"
],
[
[
119995,
119995
],
"mapped",
[
102
]
],
[
[
119996,
119996
],
"disallowed"
],
[
[
119997,
119997
],
"mapped",
[
104
]
],
[
[
119998,
119998
],
"mapped",
[
105
]
],
[
[
119999,
119999
],
"mapped",
[
106
]
],
[
[
120000,
120000
],
"mapped",
[
107
]
],
[
[
120001,
120001
],
"mapped",
[
108
]
],
[
[
120002,
120002
],
"mapped",
[
109
]
],
[
[
120003,
120003
],
"mapped",
[
110
]
],
[
[
120004,
120004
],
"disallowed"
],
[
[
120005,
120005
],
"mapped",
[
112
]
],
[
[
120006,
120006
],
"mapped",
[
113
]
],
[
[
120007,
120007
],
"mapped",
[
114
]
],
[
[
120008,
120008
],
"mapped",
[
115
]
],
[
[
120009,
120009
],
"mapped",
[
116
]
],
[
[
120010,
120010
],
"mapped",
[
117
]
],
[
[
120011,
120011
],
"mapped",
[
118
]
],
[
[
120012,
120012
],
"mapped",
[
119
]
],
[
[
120013,
120013
],
"mapped",
[
120
]
],
[
[
120014,
120014
],
"mapped",
[
121
]
],
[
[
120015,
120015
],
"mapped",
[
122
]
],
[
[
120016,
120016
],
"mapped",
[
97
]
],
[
[
120017,
120017
],
"mapped",
[
98
]
],
[
[
120018,
120018
],
"mapped",
[
99
]
],
[
[
120019,
120019
],
"mapped",
[
100
]
],
[
[
120020,
120020
],
"mapped",
[
101
]
],
[
[
120021,
120021
],
"mapped",
[
102
]
],
[
[
120022,
120022
],
"mapped",
[
103
]
],
[
[
120023,
120023
],
"mapped",
[
104
]
],
[
[
120024,
120024
],
"mapped",
[
105
]
],
[
[
120025,
120025
],
"mapped",
[
106
]
],
[
[
120026,
120026
],
"mapped",
[
107
]
],
[
[
120027,
120027
],
"mapped",
[
108
]
],
[
[
120028,
120028
],
"mapped",
[
109
]
],
[
[
120029,
120029
],
"mapped",
[
110
]
],
[
[
120030,
120030
],
"mapped",
[
111
]
],
[
[
120031,
120031
],
"mapped",
[
112
]
],
[
[
120032,
120032
],
"mapped",
[
113
]
],
[
[
120033,
120033
],
"mapped",
[
114
]
],
[
[
120034,
120034
],
"mapped",
[
115
]
],
[
[
120035,
120035
],
"mapped",
[
116
]
],
[
[
120036,
120036
],
"mapped",
[
117
]
],
[
[
120037,
120037
],
"mapped",
[
118
]
],
[
[
120038,
120038
],
"mapped",
[
119
]
],
[
[
120039,
120039
],
"mapped",
[
120
]
],
[
[
120040,
120040
],
"mapped",
[
121
]
],
[
[
120041,
120041
],
"mapped",
[
122
]
],
[
[
120042,
120042
],
"mapped",
[
97
]
],
[
[
120043,
120043
],
"mapped",
[
98
]
],
[
[
120044,
120044
],
"mapped",
[
99
]
],
[
[
120045,
120045
],
"mapped",
[
100
]
],
[
[
120046,
120046
],
"mapped",
[
101
]
],
[
[
120047,
120047
],
"mapped",
[
102
]
],
[
[
120048,
120048
],
"mapped",
[
103
]
],
[
[
120049,
120049
],
"mapped",
[
104
]
],
[
[
120050,
120050
],
"mapped",
[
105
]
],
[
[
120051,
120051
],
"mapped",
[
106
]
],
[
[
120052,
120052
],
"mapped",
[
107
]
],
[
[
120053,
120053
],
"mapped",
[
108
]
],
[
[
120054,
120054
],
"mapped",
[
109
]
],
[
[
120055,
120055
],
"mapped",
[
110
]
],
[
[
120056,
120056
],
"mapped",
[
111
]
],
[
[
120057,
120057
],
"mapped",
[
112
]
],
[
[
120058,
120058
],
"mapped",
[
113
]
],
[
[
120059,
120059
],
"mapped",
[
114
]
],
[
[
120060,
120060
],
"mapped",
[
115
]
],
[
[
120061,
120061
],
"mapped",
[
116
]
],
[
[
120062,
120062
],
"mapped",
[
117
]
],
[
[
120063,
120063
],
"mapped",
[
118
]
],
[
[
120064,
120064
],
"mapped",
[
119
]
],
[
[
120065,
120065
],
"mapped",
[
120
]
],
[
[
120066,
120066
],
"mapped",
[
121
]
],
[
[
120067,
120067
],
"mapped",
[
122
]
],
[
[
120068,
120068
],
"mapped",
[
97
]
],
[
[
120069,
120069
],
"mapped",
[
98
]
],
[
[
120070,
120070
],
"disallowed"
],
[
[
120071,
120071
],
"mapped",
[
100
]
],
[
[
120072,
120072
],
"mapped",
[
101
]
],
[
[
120073,
120073
],
"mapped",
[
102
]
],
[
[
120074,
120074
],
"mapped",
[
103
]
],
[
[
120075,
120076
],
"disallowed"
],
[
[
120077,
120077
],
"mapped",
[
106
]
],
[
[
120078,
120078
],
"mapped",
[
107
]
],
[
[
120079,
120079
],
"mapped",
[
108
]
],
[
[
120080,
120080
],
"mapped",
[
109
]
],
[
[
120081,
120081
],
"mapped",
[
110
]
],
[
[
120082,
120082
],
"mapped",
[
111
]
],
[
[
120083,
120083
],
"mapped",
[
112
]
],
[
[
120084,
120084
],
"mapped",
[
113
]
],
[
[
120085,
120085
],
"disallowed"
],
[
[
120086,
120086
],
"mapped",
[
115
]
],
[
[
120087,
120087
],
"mapped",
[
116
]
],
[
[
120088,
120088
],
"mapped",
[
117
]
],
[
[
120089,
120089
],
"mapped",
[
118
]
],
[
[
120090,
120090
],
"mapped",
[
119
]
],
[
[
120091,
120091
],
"mapped",
[
120
]
],
[
[
120092,
120092
],
"mapped",
[
121
]
],
[
[
120093,
120093
],
"disallowed"
],
[
[
120094,
120094
],
"mapped",
[
97
]
],
[
[
120095,
120095
],
"mapped",
[
98
]
],
[
[
120096,
120096
],
"mapped",
[
99
]
],
[
[
120097,
120097
],
"mapped",
[
100
]
],
[
[
120098,
120098
],
"mapped",
[
101
]
],
[
[
120099,
120099
],
"mapped",
[
102
]
],
[
[
120100,
120100
],
"mapped",
[
103
]
],
[
[
120101,
120101
],
"mapped",
[
104
]
],
[
[
120102,
120102
],
"mapped",
[
105
]
],
[
[
120103,
120103
],
"mapped",
[
106
]
],
[
[
120104,
120104
],
"mapped",
[
107
]
],
[
[
120105,
120105
],
"mapped",
[
108
]
],
[
[
120106,
120106
],
"mapped",
[
109
]
],
[
[
120107,
120107
],
"mapped",
[
110
]
],
[
[
120108,
120108
],
"mapped",
[
111
]
],
[
[
120109,
120109
],
"mapped",
[
112
]
],
[
[
120110,
120110
],
"mapped",
[
113
]
],
[
[
120111,
120111
],
"mapped",
[
114
]
],
[
[
120112,
120112
],
"mapped",
[
115
]
],
[
[
120113,
120113
],
"mapped",
[
116
]
],
[
[
120114,
120114
],
"mapped",
[
117
]
],
[
[
120115,
120115
],
"mapped",
[
118
]
],
[
[
120116,
120116
],
"mapped",
[
119
]
],
[
[
120117,
120117
],
"mapped",
[
120
]
],
[
[
120118,
120118
],
"mapped",
[
121
]
],
[
[
120119,
120119
],
"mapped",
[
122
]
],
[
[
120120,
120120
],
"mapped",
[
97
]
],
[
[
120121,
120121
],
"mapped",
[
98
]
],
[
[
120122,
120122
],
"disallowed"
],
[
[
120123,
120123
],
"mapped",
[
100
]
],
[
[
120124,
120124
],
"mapped",
[
101
]
],
[
[
120125,
120125
],
"mapped",
[
102
]
],
[
[
120126,
120126
],
"mapped",
[
103
]
],
[
[
120127,
120127
],
"disallowed"
],
[
[
120128,
120128
],
"mapped",
[
105
]
],
[
[
120129,
120129
],
"mapped",
[
106
]
],
[
[
120130,
120130
],
"mapped",
[
107
]
],
[
[
120131,
120131
],
"mapped",
[
108
]
],
[
[
120132,
120132
],
"mapped",
[
109
]
],
[
[
120133,
120133
],
"disallowed"
],
[
[
120134,
120134
],
"mapped",
[
111
]
],
[
[
120135,
120137
],
"disallowed"
],
[
[
120138,
120138
],
"mapped",
[
115
]
],
[
[
120139,
120139
],
"mapped",
[
116
]
],
[
[
120140,
120140
],
"mapped",
[
117
]
],
[
[
120141,
120141
],
"mapped",
[
118
]
],
[
[
120142,
120142
],
"mapped",
[
119
]
],
[
[
120143,
120143
],
"mapped",
[
120
]
],
[
[
120144,
120144
],
"mapped",
[
121
]
],
[
[
120145,
120145
],
"disallowed"
],
[
[
120146,
120146
],
"mapped",
[
97
]
],
[
[
120147,
120147
],
"mapped",
[
98
]
],
[
[
120148,
120148
],
"mapped",
[
99
]
],
[
[
120149,
120149
],
"mapped",
[
100
]
],
[
[
120150,
120150
],
"mapped",
[
101
]
],
[
[
120151,
120151
],
"mapped",
[
102
]
],
[
[
120152,
120152
],
"mapped",
[
103
]
],
[
[
120153,
120153
],
"mapped",
[
104
]
],
[
[
120154,
120154
],
"mapped",
[
105
]
],
[
[
120155,
120155
],
"mapped",
[
106
]
],
[
[
120156,
120156
],
"mapped",
[
107
]
],
[
[
120157,
120157
],
"mapped",
[
108
]
],
[
[
120158,
120158
],
"mapped",
[
109
]
],
[
[
120159,
120159
],
"mapped",
[
110
]
],
[
[
120160,
120160
],
"mapped",
[
111
]
],
[
[
120161,
120161
],
"mapped",
[
112
]
],
[
[
120162,
120162
],
"mapped",
[
113
]
],
[
[
120163,
120163
],
"mapped",
[
114
]
],
[
[
120164,
120164
],
"mapped",
[
115
]
],
[
[
120165,
120165
],
"mapped",
[
116
]
],
[
[
120166,
120166
],
"mapped",
[
117
]
],
[
[
120167,
120167
],
"mapped",
[
118
]
],
[
[
120168,
120168
],
"mapped",
[
119
]
],
[
[
120169,
120169
],
"mapped",
[
120
]
],
[
[
120170,
120170
],
"mapped",
[
121
]
],
[
[
120171,
120171
],
"mapped",
[
122
]
],
[
[
120172,
120172
],
"mapped",
[
97
]
],
[
[
120173,
120173
],
"mapped",
[
98
]
],
[
[
120174,
120174
],
"mapped",
[
99
]
],
[
[
120175,
120175
],
"mapped",
[
100
]
],
[
[
120176,
120176
],
"mapped",
[
101
]
],
[
[
120177,
120177
],
"mapped",
[
102
]
],
[
[
120178,
120178
],
"mapped",
[
103
]
],
[
[
120179,
120179
],
"mapped",
[
104
]
],
[
[
120180,
120180
],
"mapped",
[
105
]
],
[
[
120181,
120181
],
"mapped",
[
106
]
],
[
[
120182,
120182
],
"mapped",
[
107
]
],
[
[
120183,
120183
],
"mapped",
[
108
]
],
[
[
120184,
120184
],
"mapped",
[
109
]
],
[
[
120185,
120185
],
"mapped",
[
110
]
],
[
[
120186,
120186
],
"mapped",
[
111
]
],
[
[
120187,
120187
],
"mapped",
[
112
]
],
[
[
120188,
120188
],
"mapped",
[
113
]
],
[
[
120189,
120189
],
"mapped",
[
114
]
],
[
[
120190,
120190
],
"mapped",
[
115
]
],
[
[
120191,
120191
],
"mapped",
[
116
]
],
[
[
120192,
120192
],
"mapped",
[
117
]
],
[
[
120193,
120193
],
"mapped",
[
118
]
],
[
[
120194,
120194
],
"mapped",
[
119
]
],
[
[
120195,
120195
],
"mapped",
[
120
]
],
[
[
120196,
120196
],
"mapped",
[
121
]
],
[
[
120197,
120197
],
"mapped",
[
122
]
],
[
[
120198,
120198
],
"mapped",
[
97
]
],
[
[
120199,
120199
],
"mapped",
[
98
]
],
[
[
120200,
120200
],
"mapped",
[
99
]
],
[
[
120201,
120201
],
"mapped",
[
100
]
],
[
[
120202,
120202
],
"mapped",
[
101
]
],
[
[
120203,
120203
],
"mapped",
[
102
]
],
[
[
120204,
120204
],
"mapped",
[
103
]
],
[
[
120205,
120205
],
"mapped",
[
104
]
],
[
[
120206,
120206
],
"mapped",
[
105
]
],
[
[
120207,
120207
],
"mapped",
[
106
]
],
[
[
120208,
120208
],
"mapped",
[
107
]
],
[
[
120209,
120209
],
"mapped",
[
108
]
],
[
[
120210,
120210
],
"mapped",
[
109
]
],
[
[
120211,
120211
],
"mapped",
[
110
]
],
[
[
120212,
120212
],
"mapped",
[
111
]
],
[
[
120213,
120213
],
"mapped",
[
112
]
],
[
[
120214,
120214
],
"mapped",
[
113
]
],
[
[
120215,
120215
],
"mapped",
[
114
]
],
[
[
120216,
120216
],
"mapped",
[
115
]
],
[
[
120217,
120217
],
"mapped",
[
116
]
],
[
[
120218,
120218
],
"mapped",
[
117
]
],
[
[
120219,
120219
],
"mapped",
[
118
]
],
[
[
120220,
120220
],
"mapped",
[
119
]
],
[
[
120221,
120221
],
"mapped",
[
120
]
],
[
[
120222,
120222
],
"mapped",
[
121
]
],
[
[
120223,
120223
],
"mapped",
[
122
]
],
[
[
120224,
120224
],
"mapped",
[
97
]
],
[
[
120225,
120225
],
"mapped",
[
98
]
],
[
[
120226,
120226
],
"mapped",
[
99
]
],
[
[
120227,
120227
],
"mapped",
[
100
]
],
[
[
120228,
120228
],
"mapped",
[
101
]
],
[
[
120229,
120229
],
"mapped",
[
102
]
],
[
[
120230,
120230
],
"mapped",
[
103
]
],
[
[
120231,
120231
],
"mapped",
[
104
]
],
[
[
120232,
120232
],
"mapped",
[
105
]
],
[
[
120233,
120233
],
"mapped",
[
106
]
],
[
[
120234,
120234
],
"mapped",
[
107
]
],
[
[
120235,
120235
],
"mapped",
[
108
]
],
[
[
120236,
120236
],
"mapped",
[
109
]
],
[
[
120237,
120237
],
"mapped",
[
110
]
],
[
[
120238,
120238
],
"mapped",
[
111
]
],
[
[
120239,
120239
],
"mapped",
[
112
]
],
[
[
120240,
120240
],
"mapped",
[
113
]
],
[
[
120241,
120241
],
"mapped",
[
114
]
],
[
[
120242,
120242
],
"mapped",
[
115
]
],
[
[
120243,
120243
],
"mapped",
[
116
]
],
[
[
120244,
120244
],
"mapped",
[
117
]
],
[
[
120245,
120245
],
"mapped",
[
118
]
],
[
[
120246,
120246
],
"mapped",
[
119
]
],
[
[
120247,
120247
],
"mapped",
[
120
]
],
[
[
120248,
120248
],
"mapped",
[
121
]
],
[
[
120249,
120249
],
"mapped",
[
122
]
],
[
[
120250,
120250
],
"mapped",
[
97
]
],
[
[
120251,
120251
],
"mapped",
[
98
]
],
[
[
120252,
120252
],
"mapped",
[
99
]
],
[
[
120253,
120253
],
"mapped",
[
100
]
],
[
[
120254,
120254
],
"mapped",
[
101
]
],
[
[
120255,
120255
],
"mapped",
[
102
]
],
[
[
120256,
120256
],
"mapped",
[
103
]
],
[
[
120257,
120257
],
"mapped",
[
104
]
],
[
[
120258,
120258
],
"mapped",
[
105
]
],
[
[
120259,
120259
],
"mapped",
[
106
]
],
[
[
120260,
120260
],
"mapped",
[
107
]
],
[
[
120261,
120261
],
"mapped",
[
108
]
],
[
[
120262,
120262
],
"mapped",
[
109
]
],
[
[
120263,
120263
],
"mapped",
[
110
]
],
[
[
120264,
120264
],
"mapped",
[
111
]
],
[
[
120265,
120265
],
"mapped",
[
112
]
],
[
[
120266,
120266
],
"mapped",
[
113
]
],
[
[
120267,
120267
],
"mapped",
[
114
]
],
[
[
120268,
120268
],
"mapped",
[
115
]
],
[
[
120269,
120269
],
"mapped",
[
116
]
],
[
[
120270,
120270
],
"mapped",
[
117
]
],
[
[
120271,
120271
],
"mapped",
[
118
]
],
[
[
120272,
120272
],
"mapped",
[
119
]
],
[
[
120273,
120273
],
"mapped",
[
120
]
],
[
[
120274,
120274
],
"mapped",
[
121
]
],
[
[
120275,
120275
],
"mapped",
[
122
]
],
[
[
120276,
120276
],
"mapped",
[
97
]
],
[
[
120277,
120277
],
"mapped",
[
98
]
],
[
[
120278,
120278
],
"mapped",
[
99
]
],
[
[
120279,
120279
],
"mapped",
[
100
]
],
[
[
120280,
120280
],
"mapped",
[
101
]
],
[
[
120281,
120281
],
"mapped",
[
102
]
],
[
[
120282,
120282
],
"mapped",
[
103
]
],
[
[
120283,
120283
],
"mapped",
[
104
]
],
[
[
120284,
120284
],
"mapped",
[
105
]
],
[
[
120285,
120285
],
"mapped",
[
106
]
],
[
[
120286,
120286
],
"mapped",
[
107
]
],
[
[
120287,
120287
],
"mapped",
[
108
]
],
[
[
120288,
120288
],
"mapped",
[
109
]
],
[
[
120289,
120289
],
"mapped",
[
110
]
],
[
[
120290,
120290
],
"mapped",
[
111
]
],
[
[
120291,
120291
],
"mapped",
[
112
]
],
[
[
120292,
120292
],
"mapped",
[
113
]
],
[
[
120293,
120293
],
"mapped",
[
114
]
],
[
[
120294,
120294
],
"mapped",
[
115
]
],
[
[
120295,
120295
],
"mapped",
[
116
]
],
[
[
120296,
120296
],
"mapped",
[
117
]
],
[
[
120297,
120297
],
"mapped",
[
118
]
],
[
[
120298,
120298
],
"mapped",
[
119
]
],
[
[
120299,
120299
],
"mapped",
[
120
]
],
[
[
120300,
120300
],
"mapped",
[
121
]
],
[
[
120301,
120301
],
"mapped",
[
122
]
],
[
[
120302,
120302
],
"mapped",
[
97
]
],
[
[
120303,
120303
],
"mapped",
[
98
]
],
[
[
120304,
120304
],
"mapped",
[
99
]
],
[
[
120305,
120305
],
"mapped",
[
100
]
],
[
[
120306,
120306
],
"mapped",
[
101
]
],
[
[
120307,
120307
],
"mapped",
[
102
]
],
[
[
120308,
120308
],
"mapped",
[
103
]
],
[
[
120309,
120309
],
"mapped",
[
104
]
],
[
[
120310,
120310
],
"mapped",
[
105
]
],
[
[
120311,
120311
],
"mapped",
[
106
]
],
[
[
120312,
120312
],
"mapped",
[
107
]
],
[
[
120313,
120313
],
"mapped",
[
108
]
],
[
[
120314,
120314
],
"mapped",
[
109
]
],
[
[
120315,
120315
],
"mapped",
[
110
]
],
[
[
120316,
120316
],
"mapped",
[
111
]
],
[
[
120317,
120317
],
"mapped",
[
112
]
],
[
[
120318,
120318
],
"mapped",
[
113
]
],
[
[
120319,
120319
],
"mapped",
[
114
]
],
[
[
120320,
120320
],
"mapped",
[
115
]
],
[
[
120321,
120321
],
"mapped",
[
116
]
],
[
[
120322,
120322
],
"mapped",
[
117
]
],
[
[
120323,
120323
],
"mapped",
[
118
]
],
[
[
120324,
120324
],
"mapped",
[
119
]
],
[
[
120325,
120325
],
"mapped",
[
120
]
],
[
[
120326,
120326
],
"mapped",
[
121
]
],
[
[
120327,
120327
],
"mapped",
[
122
]
],
[
[
120328,
120328
],
"mapped",
[
97
]
],
[
[
120329,
120329
],
"mapped",
[
98
]
],
[
[
120330,
120330
],
"mapped",
[
99
]
],
[
[
120331,
120331
],
"mapped",
[
100
]
],
[
[
120332,
120332
],
"mapped",
[
101
]
],
[
[
120333,
120333
],
"mapped",
[
102
]
],
[
[
120334,
120334
],
"mapped",
[
103
]
],
[
[
120335,
120335
],
"mapped",
[
104
]
],
[
[
120336,
120336
],
"mapped",
[
105
]
],
[
[
120337,
120337
],
"mapped",
[
106
]
],
[
[
120338,
120338
],
"mapped",
[
107
]
],
[
[
120339,
120339
],
"mapped",
[
108
]
],
[
[
120340,
120340
],
"mapped",
[
109
]
],
[
[
120341,
120341
],
"mapped",
[
110
]
],
[
[
120342,
120342
],
"mapped",
[
111
]
],
[
[
120343,
120343
],
"mapped",
[
112
]
],
[
[
120344,
120344
],
"mapped",
[
113
]
],
[
[
120345,
120345
],
"mapped",
[
114
]
],
[
[
120346,
120346
],
"mapped",
[
115
]
],
[
[
120347,
120347
],
"mapped",
[
116
]
],
[
[
120348,
120348
],
"mapped",
[
117
]
],
[
[
120349,
120349
],
"mapped",
[
118
]
],
[
[
120350,
120350
],
"mapped",
[
119
]
],
[
[
120351,
120351
],
"mapped",
[
120
]
],
[
[
120352,
120352
],
"mapped",
[
121
]
],
[
[
120353,
120353
],
"mapped",
[
122
]
],
[
[
120354,
120354
],
"mapped",
[
97
]
],
[
[
120355,
120355
],
"mapped",
[
98
]
],
[
[
120356,
120356
],
"mapped",
[
99
]
],
[
[
120357,
120357
],
"mapped",
[
100
]
],
[
[
120358,
120358
],
"mapped",
[
101
]
],
[
[
120359,
120359
],
"mapped",
[
102
]
],
[
[
120360,
120360
],
"mapped",
[
103
]
],
[
[
120361,
120361
],
"mapped",
[
104
]
],
[
[
120362,
120362
],
"mapped",
[
105
]
],
[
[
120363,
120363
],
"mapped",
[
106
]
],
[
[
120364,
120364
],
"mapped",
[
107
]
],
[
[
120365,
120365
],
"mapped",
[
108
]
],
[
[
120366,
120366
],
"mapped",
[
109
]
],
[
[
120367,
120367
],
"mapped",
[
110
]
],
[
[
120368,
120368
],
"mapped",
[
111
]
],
[
[
120369,
120369
],
"mapped",
[
112
]
],
[
[
120370,
120370
],
"mapped",
[
113
]
],
[
[
120371,
120371
],
"mapped",
[
114
]
],
[
[
120372,
120372
],
"mapped",
[
115
]
],
[
[
120373,
120373
],
"mapped",
[
116
]
],
[
[
120374,
120374
],
"mapped",
[
117
]
],
[
[
120375,
120375
],
"mapped",
[
118
]
],
[
[
120376,
120376
],
"mapped",
[
119
]
],
[
[
120377,
120377
],
"mapped",
[
120
]
],
[
[
120378,
120378
],
"mapped",
[
121
]
],
[
[
120379,
120379
],
"mapped",
[
122
]
],
[
[
120380,
120380
],
"mapped",
[
97
]
],
[
[
120381,
120381
],
"mapped",
[
98
]
],
[
[
120382,
120382
],
"mapped",
[
99
]
],
[
[
120383,
120383
],
"mapped",
[
100
]
],
[
[
120384,
120384
],
"mapped",
[
101
]
],
[
[
120385,
120385
],
"mapped",
[
102
]
],
[
[
120386,
120386
],
"mapped",
[
103
]
],
[
[
120387,
120387
],
"mapped",
[
104
]
],
[
[
120388,
120388
],
"mapped",
[
105
]
],
[
[
120389,
120389
],
"mapped",
[
106
]
],
[
[
120390,
120390
],
"mapped",
[
107
]
],
[
[
120391,
120391
],
"mapped",
[
108
]
],
[
[
120392,
120392
],
"mapped",
[
109
]
],
[
[
120393,
120393
],
"mapped",
[
110
]
],
[
[
120394,
120394
],
"mapped",
[
111
]
],
[
[
120395,
120395
],
"mapped",
[
112
]
],
[
[
120396,
120396
],
"mapped",
[
113
]
],
[
[
120397,
120397
],
"mapped",
[
114
]
],
[
[
120398,
120398
],
"mapped",
[
115
]
],
[
[
120399,
120399
],
"mapped",
[
116
]
],
[
[
120400,
120400
],
"mapped",
[
117
]
],
[
[
120401,
120401
],
"mapped",
[
118
]
],
[
[
120402,
120402
],
"mapped",
[
119
]
],
[
[
120403,
120403
],
"mapped",
[
120
]
],
[
[
120404,
120404
],
"mapped",
[
121
]
],
[
[
120405,
120405
],
"mapped",
[
122
]
],
[
[
120406,
120406
],
"mapped",
[
97
]
],
[
[
120407,
120407
],
"mapped",
[
98
]
],
[
[
120408,
120408
],
"mapped",
[
99
]
],
[
[
120409,
120409
],
"mapped",
[
100
]
],
[
[
120410,
120410
],
"mapped",
[
101
]
],
[
[
120411,
120411
],
"mapped",
[
102
]
],
[
[
120412,
120412
],
"mapped",
[
103
]
],
[
[
120413,
120413
],
"mapped",
[
104
]
],
[
[
120414,
120414
],
"mapped",
[
105
]
],
[
[
120415,
120415
],
"mapped",
[
106
]
],
[
[
120416,
120416
],
"mapped",
[
107
]
],
[
[
120417,
120417
],
"mapped",
[
108
]
],
[
[
120418,
120418
],
"mapped",
[
109
]
],
[
[
120419,
120419
],
"mapped",
[
110
]
],
[
[
120420,
120420
],
"mapped",
[
111
]
],
[
[
120421,
120421
],
"mapped",
[
112
]
],
[
[
120422,
120422
],
"mapped",
[
113
]
],
[
[
120423,
120423
],
"mapped",
[
114
]
],
[
[
120424,
120424
],
"mapped",
[
115
]
],
[
[
120425,
120425
],
"mapped",
[
116
]
],
[
[
120426,
120426
],
"mapped",
[
117
]
],
[
[
120427,
120427
],
"mapped",
[
118
]
],
[
[
120428,
120428
],
"mapped",
[
119
]
],
[
[
120429,
120429
],
"mapped",
[
120
]
],
[
[
120430,
120430
],
"mapped",
[
121
]
],
[
[
120431,
120431
],
"mapped",
[
122
]
],
[
[
120432,
120432
],
"mapped",
[
97
]
],
[
[
120433,
120433
],
"mapped",
[
98
]
],
[
[
120434,
120434
],
"mapped",
[
99
]
],
[
[
120435,
120435
],
"mapped",
[
100
]
],
[
[
120436,
120436
],
"mapped",
[
101
]
],
[
[
120437,
120437
],
"mapped",
[
102
]
],
[
[
120438,
120438
],
"mapped",
[
103
]
],
[
[
120439,
120439
],
"mapped",
[
104
]
],
[
[
120440,
120440
],
"mapped",
[
105
]
],
[
[
120441,
120441
],
"mapped",
[
106
]
],
[
[
120442,
120442
],
"mapped",
[
107
]
],
[
[
120443,
120443
],
"mapped",
[
108
]
],
[
[
120444,
120444
],
"mapped",
[
109
]
],
[
[
120445,
120445
],
"mapped",
[
110
]
],
[
[
120446,
120446
],
"mapped",
[
111
]
],
[
[
120447,
120447
],
"mapped",
[
112
]
],
[
[
120448,
120448
],
"mapped",
[
113
]
],
[
[
120449,
120449
],
"mapped",
[
114
]
],
[
[
120450,
120450
],
"mapped",
[
115
]
],
[
[
120451,
120451
],
"mapped",
[
116
]
],
[
[
120452,
120452
],
"mapped",
[
117
]
],
[
[
120453,
120453
],
"mapped",
[
118
]
],
[
[
120454,
120454
],
"mapped",
[
119
]
],
[
[
120455,
120455
],
"mapped",
[
120
]
],
[
[
120456,
120456
],
"mapped",
[
121
]
],
[
[
120457,
120457
],
"mapped",
[
122
]
],
[
[
120458,
120458
],
"mapped",
[
97
]
],
[
[
120459,
120459
],
"mapped",
[
98
]
],
[
[
120460,
120460
],
"mapped",
[
99
]
],
[
[
120461,
120461
],
"mapped",
[
100
]
],
[
[
120462,
120462
],
"mapped",
[
101
]
],
[
[
120463,
120463
],
"mapped",
[
102
]
],
[
[
120464,
120464
],
"mapped",
[
103
]
],
[
[
120465,
120465
],
"mapped",
[
104
]
],
[
[
120466,
120466
],
"mapped",
[
105
]
],
[
[
120467,
120467
],
"mapped",
[
106
]
],
[
[
120468,
120468
],
"mapped",
[
107
]
],
[
[
120469,
120469
],
"mapped",
[
108
]
],
[
[
120470,
120470
],
"mapped",
[
109
]
],
[
[
120471,
120471
],
"mapped",
[
110
]
],
[
[
120472,
120472
],
"mapped",
[
111
]
],
[
[
120473,
120473
],
"mapped",
[
112
]
],
[
[
120474,
120474
],
"mapped",
[
113
]
],
[
[
120475,
120475
],
"mapped",
[
114
]
],
[
[
120476,
120476
],
"mapped",
[
115
]
],
[
[
120477,
120477
],
"mapped",
[
116
]
],
[
[
120478,
120478
],
"mapped",
[
117
]
],
[
[
120479,
120479
],
"mapped",
[
118
]
],
[
[
120480,
120480
],
"mapped",
[
119
]
],
[
[
120481,
120481
],
"mapped",
[
120
]
],
[
[
120482,
120482
],
"mapped",
[
121
]
],
[
[
120483,
120483
],
"mapped",
[
122
]
],
[
[
120484,
120484
],
"mapped",
[
305
]
],
[
[
120485,
120485
],
"mapped",
[
567
]
],
[
[
120486,
120487
],
"disallowed"
],
[
[
120488,
120488
],
"mapped",
[
945
]
],
[
[
120489,
120489
],
"mapped",
[
946
]
],
[
[
120490,
120490
],
"mapped",
[
947
]
],
[
[
120491,
120491
],
"mapped",
[
948
]
],
[
[
120492,
120492
],
"mapped",
[
949
]
],
[
[
120493,
120493
],
"mapped",
[
950
]
],
[
[
120494,
120494
],
"mapped",
[
951
]
],
[
[
120495,
120495
],
"mapped",
[
952
]
],
[
[
120496,
120496
],
"mapped",
[
953
]
],
[
[
120497,
120497
],
"mapped",
[
954
]
],
[
[
120498,
120498
],
"mapped",
[
955
]
],
[
[
120499,
120499
],
"mapped",
[
956
]
],
[
[
120500,
120500
],
"mapped",
[
957
]
],
[
[
120501,
120501
],
"mapped",
[
958
]
],
[
[
120502,
120502
],
"mapped",
[
959
]
],
[
[
120503,
120503
],
"mapped",
[
960
]
],
[
[
120504,
120504
],
"mapped",
[
961
]
],
[
[
120505,
120505
],
"mapped",
[
952
]
],
[
[
120506,
120506
],
"mapped",
[
963
]
],
[
[
120507,
120507
],
"mapped",
[
964
]
],
[
[
120508,
120508
],
"mapped",
[
965
]
],
[
[
120509,
120509
],
"mapped",
[
966
]
],
[
[
120510,
120510
],
"mapped",
[
967
]
],
[
[
120511,
120511
],
"mapped",
[
968
]
],
[
[
120512,
120512
],
"mapped",
[
969
]
],
[
[
120513,
120513
],
"mapped",
[
8711
]
],
[
[
120514,
120514
],
"mapped",
[
945
]
],
[
[
120515,
120515
],
"mapped",
[
946
]
],
[
[
120516,
120516
],
"mapped",
[
947
]
],
[
[
120517,
120517
],
"mapped",
[
948
]
],
[
[
120518,
120518
],
"mapped",
[
949
]
],
[
[
120519,
120519
],
"mapped",
[
950
]
],
[
[
120520,
120520
],
"mapped",
[
951
]
],
[
[
120521,
120521
],
"mapped",
[
952
]
],
[
[
120522,
120522
],
"mapped",
[
953
]
],
[
[
120523,
120523
],
"mapped",
[
954
]
],
[
[
120524,
120524
],
"mapped",
[
955
]
],
[
[
120525,
120525
],
"mapped",
[
956
]
],
[
[
120526,
120526
],
"mapped",
[
957
]
],
[
[
120527,
120527
],
"mapped",
[
958
]
],
[
[
120528,
120528
],
"mapped",
[
959
]
],
[
[
120529,
120529
],
"mapped",
[
960
]
],
[
[
120530,
120530
],
"mapped",
[
961
]
],
[
[
120531,
120532
],
"mapped",
[
963
]
],
[
[
120533,
120533
],
"mapped",
[
964
]
],
[
[
120534,
120534
],
"mapped",
[
965
]
],
[
[
120535,
120535
],
"mapped",
[
966
]
],
[
[
120536,
120536
],
"mapped",
[
967
]
],
[
[
120537,
120537
],
"mapped",
[
968
]
],
[
[
120538,
120538
],
"mapped",
[
969
]
],
[
[
120539,
120539
],
"mapped",
[
8706
]
],
[
[
120540,
120540
],
"mapped",
[
949
]
],
[
[
120541,
120541
],
"mapped",
[
952
]
],
[
[
120542,
120542
],
"mapped",
[
954
]
],
[
[
120543,
120543
],
"mapped",
[
966
]
],
[
[
120544,
120544
],
"mapped",
[
961
]
],
[
[
120545,
120545
],
"mapped",
[
960
]
],
[
[
120546,
120546
],
"mapped",
[
945
]
],
[
[
120547,
120547
],
"mapped",
[
946
]
],
[
[
120548,
120548
],
"mapped",
[
947
]
],
[
[
120549,
120549
],
"mapped",
[
948
]
],
[
[
120550,
120550
],
"mapped",
[
949
]
],
[
[
120551,
120551
],
"mapped",
[
950
]
],
[
[
120552,
120552
],
"mapped",
[
951
]
],
[
[
120553,
120553
],
"mapped",
[
952
]
],
[
[
120554,
120554
],
"mapped",
[
953
]
],
[
[
120555,
120555
],
"mapped",
[
954
]
],
[
[
120556,
120556
],
"mapped",
[
955
]
],
[
[
120557,
120557
],
"mapped",
[
956
]
],
[
[
120558,
120558
],
"mapped",
[
957
]
],
[
[
120559,
120559
],
"mapped",
[
958
]
],
[
[
120560,
120560
],
"mapped",
[
959
]
],
[
[
120561,
120561
],
"mapped",
[
960
]
],
[
[
120562,
120562
],
"mapped",
[
961
]
],
[
[
120563,
120563
],
"mapped",
[
952
]
],
[
[
120564,
120564
],
"mapped",
[
963
]
],
[
[
120565,
120565
],
"mapped",
[
964
]
],
[
[
120566,
120566
],
"mapped",
[
965
]
],
[
[
120567,
120567
],
"mapped",
[
966
]
],
[
[
120568,
120568
],
"mapped",
[
967
]
],
[
[
120569,
120569
],
"mapped",
[
968
]
],
[
[
120570,
120570
],
"mapped",
[
969
]
],
[
[
120571,
120571
],
"mapped",
[
8711
]
],
[
[
120572,
120572
],
"mapped",
[
945
]
],
[
[
120573,
120573
],
"mapped",
[
946
]
],
[
[
120574,
120574
],
"mapped",
[
947
]
],
[
[
120575,
120575
],
"mapped",
[
948
]
],
[
[
120576,
120576
],
"mapped",
[
949
]
],
[
[
120577,
120577
],
"mapped",
[
950
]
],
[
[
120578,
120578
],
"mapped",
[
951
]
],
[
[
120579,
120579
],
"mapped",
[
952
]
],
[
[
120580,
120580
],
"mapped",
[
953
]
],
[
[
120581,
120581
],
"mapped",
[
954
]
],
[
[
120582,
120582
],
"mapped",
[
955
]
],
[
[
120583,
120583
],
"mapped",
[
956
]
],
[
[
120584,
120584
],
"mapped",
[
957
]
],
[
[
120585,
120585
],
"mapped",
[
958
]
],
[
[
120586,
120586
],
"mapped",
[
959
]
],
[
[
120587,
120587
],
"mapped",
[
960
]
],
[
[
120588,
120588
],
"mapped",
[
961
]
],
[
[
120589,
120590
],
"mapped",
[
963
]
],
[
[
120591,
120591
],
"mapped",
[
964
]
],
[
[
120592,
120592
],
"mapped",
[
965
]
],
[
[
120593,
120593
],
"mapped",
[
966
]
],
[
[
120594,
120594
],
"mapped",
[
967
]
],
[
[
120595,
120595
],
"mapped",
[
968
]
],
[
[
120596,
120596
],
"mapped",
[
969
]
],
[
[
120597,
120597
],
"mapped",
[
8706
]
],
[
[
120598,
120598
],
"mapped",
[
949
]
],
[
[
120599,
120599
],
"mapped",
[
952
]
],
[
[
120600,
120600
],
"mapped",
[
954
]
],
[
[
120601,
120601
],
"mapped",
[
966
]
],
[
[
120602,
120602
],
"mapped",
[
961
]
],
[
[
120603,
120603
],
"mapped",
[
960
]
],
[
[
120604,
120604
],
"mapped",
[
945
]
],
[
[
120605,
120605
],
"mapped",
[
946
]
],
[
[
120606,
120606
],
"mapped",
[
947
]
],
[
[
120607,
120607
],
"mapped",
[
948
]
],
[
[
120608,
120608
],
"mapped",
[
949
]
],
[
[
120609,
120609
],
"mapped",
[
950
]
],
[
[
120610,
120610
],
"mapped",
[
951
]
],
[
[
120611,
120611
],
"mapped",
[
952
]
],
[
[
120612,
120612
],
"mapped",
[
953
]
],
[
[
120613,
120613
],
"mapped",
[
954
]
],
[
[
120614,
120614
],
"mapped",
[
955
]
],
[
[
120615,
120615
],
"mapped",
[
956
]
],
[
[
120616,
120616
],
"mapped",
[
957
]
],
[
[
120617,
120617
],
"mapped",
[
958
]
],
[
[
120618,
120618
],
"mapped",
[
959
]
],
[
[
120619,
120619
],
"mapped",
[
960
]
],
[
[
120620,
120620
],
"mapped",
[
961
]
],
[
[
120621,
120621
],
"mapped",
[
952
]
],
[
[
120622,
120622
],
"mapped",
[
963
]
],
[
[
120623,
120623
],
"mapped",
[
964
]
],
[
[
120624,
120624
],
"mapped",
[
965
]
],
[
[
120625,
120625
],
"mapped",
[
966
]
],
[
[
120626,
120626
],
"mapped",
[
967
]
],
[
[
120627,
120627
],
"mapped",
[
968
]
],
[
[
120628,
120628
],
"mapped",
[
969
]
],
[
[
120629,
120629
],
"mapped",
[
8711
]
],
[
[
120630,
120630
],
"mapped",
[
945
]
],
[
[
120631,
120631
],
"mapped",
[
946
]
],
[
[
120632,
120632
],
"mapped",
[
947
]
],
[
[
120633,
120633
],
"mapped",
[
948
]
],
[
[
120634,
120634
],
"mapped",
[
949
]
],
[
[
120635,
120635
],
"mapped",
[
950
]
],
[
[
120636,
120636
],
"mapped",
[
951
]
],
[
[
120637,
120637
],
"mapped",
[
952
]
],
[
[
120638,
120638
],
"mapped",
[
953
]
],
[
[
120639,
120639
],
"mapped",
[
954
]
],
[
[
120640,
120640
],
"mapped",
[
955
]
],
[
[
120641,
120641
],
"mapped",
[
956
]
],
[
[
120642,
120642
],
"mapped",
[
957
]
],
[
[
120643,
120643
],
"mapped",
[
958
]
],
[
[
120644,
120644
],
"mapped",
[
959
]
],
[
[
120645,
120645
],
"mapped",
[
960
]
],
[
[
120646,
120646
],
"mapped",
[
961
]
],
[
[
120647,
120648
],
"mapped",
[
963
]
],
[
[
120649,
120649
],
"mapped",
[
964
]
],
[
[
120650,
120650
],
"mapped",
[
965
]
],
[
[
120651,
120651
],
"mapped",
[
966
]
],
[
[
120652,
120652
],
"mapped",
[
967
]
],
[
[
120653,
120653
],
"mapped",
[
968
]
],
[
[
120654,
120654
],
"mapped",
[
969
]
],
[
[
120655,
120655
],
"mapped",
[
8706
]
],
[
[
120656,
120656
],
"mapped",
[
949
]
],
[
[
120657,
120657
],
"mapped",
[
952
]
],
[
[
120658,
120658
],
"mapped",
[
954
]
],
[
[
120659,
120659
],
"mapped",
[
966
]
],
[
[
120660,
120660
],
"mapped",
[
961
]
],
[
[
120661,
120661
],
"mapped",
[
960
]
],
[
[
120662,
120662
],
"mapped",
[
945
]
],
[
[
120663,
120663
],
"mapped",
[
946
]
],
[
[
120664,
120664
],
"mapped",
[
947
]
],
[
[
120665,
120665
],
"mapped",
[
948
]
],
[
[
120666,
120666
],
"mapped",
[
949
]
],
[
[
120667,
120667
],
"mapped",
[
950
]
],
[
[
120668,
120668
],
"mapped",
[
951
]
],
[
[
120669,
120669
],
"mapped",
[
952
]
],
[
[
120670,
120670
],
"mapped",
[
953
]
],
[
[
120671,
120671
],
"mapped",
[
954
]
],
[
[
120672,
120672
],
"mapped",
[
955
]
],
[
[
120673,
120673
],
"mapped",
[
956
]
],
[
[
120674,
120674
],
"mapped",
[
957
]
],
[
[
120675,
120675
],
"mapped",
[
958
]
],
[
[
120676,
120676
],
"mapped",
[
959
]
],
[
[
120677,
120677
],
"mapped",
[
960
]
],
[
[
120678,
120678
],
"mapped",
[
961
]
],
[
[
120679,
120679
],
"mapped",
[
952
]
],
[
[
120680,
120680
],
"mapped",
[
963
]
],
[
[
120681,
120681
],
"mapped",
[
964
]
],
[
[
120682,
120682
],
"mapped",
[
965
]
],
[
[
120683,
120683
],
"mapped",
[
966
]
],
[
[
120684,
120684
],
"mapped",
[
967
]
],
[
[
120685,
120685
],
"mapped",
[
968
]
],
[
[
120686,
120686
],
"mapped",
[
969
]
],
[
[
120687,
120687
],
"mapped",
[
8711
]
],
[
[
120688,
120688
],
"mapped",
[
945
]
],
[
[
120689,
120689
],
"mapped",
[
946
]
],
[
[
120690,
120690
],
"mapped",
[
947
]
],
[
[
120691,
120691
],
"mapped",
[
948
]
],
[
[
120692,
120692
],
"mapped",
[
949
]
],
[
[
120693,
120693
],
"mapped",
[
950
]
],
[
[
120694,
120694
],
"mapped",
[
951
]
],
[
[
120695,
120695
],
"mapped",
[
952
]
],
[
[
120696,
120696
],
"mapped",
[
953
]
],
[
[
120697,
120697
],
"mapped",
[
954
]
],
[
[
120698,
120698
],
"mapped",
[
955
]
],
[
[
120699,
120699
],
"mapped",
[
956
]
],
[
[
120700,
120700
],
"mapped",
[
957
]
],
[
[
120701,
120701
],
"mapped",
[
958
]
],
[
[
120702,
120702
],
"mapped",
[
959
]
],
[
[
120703,
120703
],
"mapped",
[
960
]
],
[
[
120704,
120704
],
"mapped",
[
961
]
],
[
[
120705,
120706
],
"mapped",
[
963
]
],
[
[
120707,
120707
],
"mapped",
[
964
]
],
[
[
120708,
120708
],
"mapped",
[
965
]
],
[
[
120709,
120709
],
"mapped",
[
966
]
],
[
[
120710,
120710
],
"mapped",
[
967
]
],
[
[
120711,
120711
],
"mapped",
[
968
]
],
[
[
120712,
120712
],
"mapped",
[
969
]
],
[
[
120713,
120713
],
"mapped",
[
8706
]
],
[
[
120714,
120714
],
"mapped",
[
949
]
],
[
[
120715,
120715
],
"mapped",
[
952
]
],
[
[
120716,
120716
],
"mapped",
[
954
]
],
[
[
120717,
120717
],
"mapped",
[
966
]
],
[
[
120718,
120718
],
"mapped",
[
961
]
],
[
[
120719,
120719
],
"mapped",
[
960
]
],
[
[
120720,
120720
],
"mapped",
[
945
]
],
[
[
120721,
120721
],
"mapped",
[
946
]
],
[
[
120722,
120722
],
"mapped",
[
947
]
],
[
[
120723,
120723
],
"mapped",
[
948
]
],
[
[
120724,
120724
],
"mapped",
[
949
]
],
[
[
120725,
120725
],
"mapped",
[
950
]
],
[
[
120726,
120726
],
"mapped",
[
951
]
],
[
[
120727,
120727
],
"mapped",
[
952
]
],
[
[
120728,
120728
],
"mapped",
[
953
]
],
[
[
120729,
120729
],
"mapped",
[
954
]
],
[
[
120730,
120730
],
"mapped",
[
955
]
],
[
[
120731,
120731
],
"mapped",
[
956
]
],
[
[
120732,
120732
],
"mapped",
[
957
]
],
[
[
120733,
120733
],
"mapped",
[
958
]
],
[
[
120734,
120734
],
"mapped",
[
959
]
],
[
[
120735,
120735
],
"mapped",
[
960
]
],
[
[
120736,
120736
],
"mapped",
[
961
]
],
[
[
120737,
120737
],
"mapped",
[
952
]
],
[
[
120738,
120738
],
"mapped",
[
963
]
],
[
[
120739,
120739
],
"mapped",
[
964
]
],
[
[
120740,
120740
],
"mapped",
[
965
]
],
[
[
120741,
120741
],
"mapped",
[
966
]
],
[
[
120742,
120742
],
"mapped",
[
967
]
],
[
[
120743,
120743
],
"mapped",
[
968
]
],
[
[
120744,
120744
],
"mapped",
[
969
]
],
[
[
120745,
120745
],
"mapped",
[
8711
]
],
[
[
120746,
120746
],
"mapped",
[
945
]
],
[
[
120747,
120747
],
"mapped",
[
946
]
],
[
[
120748,
120748
],
"mapped",
[
947
]
],
[
[
120749,
120749
],
"mapped",
[
948
]
],
[
[
120750,
120750
],
"mapped",
[
949
]
],
[
[
120751,
120751
],
"mapped",
[
950
]
],
[
[
120752,
120752
],
"mapped",
[
951
]
],
[
[
120753,
120753
],
"mapped",
[
952
]
],
[
[
120754,
120754
],
"mapped",
[
953
]
],
[
[
120755,
120755
],
"mapped",
[
954
]
],
[
[
120756,
120756
],
"mapped",
[
955
]
],
[
[
120757,
120757
],
"mapped",
[
956
]
],
[
[
120758,
120758
],
"mapped",
[
957
]
],
[
[
120759,
120759
],
"mapped",
[
958
]
],
[
[
120760,
120760
],
"mapped",
[
959
]
],
[
[
120761,
120761
],
"mapped",
[
960
]
],
[
[
120762,
120762
],
"mapped",
[
961
]
],
[
[
120763,
120764
],
"mapped",
[
963
]
],
[
[
120765,
120765
],
"mapped",
[
964
]
],
[
[
120766,
120766
],
"mapped",
[
965
]
],
[
[
120767,
120767
],
"mapped",
[
966
]
],
[
[
120768,
120768
],
"mapped",
[
967
]
],
[
[
120769,
120769
],
"mapped",
[
968
]
],
[
[
120770,
120770
],
"mapped",
[
969
]
],
[
[
120771,
120771
],
"mapped",
[
8706
]
],
[
[
120772,
120772
],
"mapped",
[
949
]
],
[
[
120773,
120773
],
"mapped",
[
952
]
],
[
[
120774,
120774
],
"mapped",
[
954
]
],
[
[
120775,
120775
],
"mapped",
[
966
]
],
[
[
120776,
120776
],
"mapped",
[
961
]
],
[
[
120777,
120777
],
"mapped",
[
960
]
],
[
[
120778,
120779
],
"mapped",
[
989
]
],
[
[
120780,
120781
],
"disallowed"
],
[
[
120782,
120782
],
"mapped",
[
48
]
],
[
[
120783,
120783
],
"mapped",
[
49
]
],
[
[
120784,
120784
],
"mapped",
[
50
]
],
[
[
120785,
120785
],
"mapped",
[
51
]
],
[
[
120786,
120786
],
"mapped",
[
52
]
],
[
[
120787,
120787
],
"mapped",
[
53
]
],
[
[
120788,
120788
],
"mapped",
[
54
]
],
[
[
120789,
120789
],
"mapped",
[
55
]
],
[
[
120790,
120790
],
"mapped",
[
56
]
],
[
[
120791,
120791
],
"mapped",
[
57
]
],
[
[
120792,
120792
],
"mapped",
[
48
]
],
[
[
120793,
120793
],
"mapped",
[
49
]
],
[
[
120794,
120794
],
"mapped",
[
50
]
],
[
[
120795,
120795
],
"mapped",
[
51
]
],
[
[
120796,
120796
],
"mapped",
[
52
]
],
[
[
120797,
120797
],
"mapped",
[
53
]
],
[
[
120798,
120798
],
"mapped",
[
54
]
],
[
[
120799,
120799
],
"mapped",
[
55
]
],
[
[
120800,
120800
],
"mapped",
[
56
]
],
[
[
120801,
120801
],
"mapped",
[
57
]
],
[
[
120802,
120802
],
"mapped",
[
48
]
],
[
[
120803,
120803
],
"mapped",
[
49
]
],
[
[
120804,
120804
],
"mapped",
[
50
]
],
[
[
120805,
120805
],
"mapped",
[
51
]
],
[
[
120806,
120806
],
"mapped",
[
52
]
],
[
[
120807,
120807
],
"mapped",
[
53
]
],
[
[
120808,
120808
],
"mapped",
[
54
]
],
[
[
120809,
120809
],
"mapped",
[
55
]
],
[
[
120810,
120810
],
"mapped",
[
56
]
],
[
[
120811,
120811
],
"mapped",
[
57
]
],
[
[
120812,
120812
],
"mapped",
[
48
]
],
[
[
120813,
120813
],
"mapped",
[
49
]
],
[
[
120814,
120814
],
"mapped",
[
50
]
],
[
[
120815,
120815
],
"mapped",
[
51
]
],
[
[
120816,
120816
],
"mapped",
[
52
]
],
[
[
120817,
120817
],
"mapped",
[
53
]
],
[
[
120818,
120818
],
"mapped",
[
54
]
],
[
[
120819,
120819
],
"mapped",
[
55
]
],
[
[
120820,
120820
],
"mapped",
[
56
]
],
[
[
120821,
120821
],
"mapped",
[
57
]
],
[
[
120822,
120822
],
"mapped",
[
48
]
],
[
[
120823,
120823
],
"mapped",
[
49
]
],
[
[
120824,
120824
],
"mapped",
[
50
]
],
[
[
120825,
120825
],
"mapped",
[
51
]
],
[
[
120826,
120826
],
"mapped",
[
52
]
],
[
[
120827,
120827
],
"mapped",
[
53
]
],
[
[
120828,
120828
],
"mapped",
[
54
]
],
[
[
120829,
120829
],
"mapped",
[
55
]
],
[
[
120830,
120830
],
"mapped",
[
56
]
],
[
[
120831,
120831
],
"mapped",
[
57
]
],
[
[
120832,
121343
],
"valid",
[
],
"NV8"
],
[
[
121344,
121398
],
"valid"
],
[
[
121399,
121402
],
"valid",
[
],
"NV8"
],
[
[
121403,
121452
],
"valid"
],
[
[
121453,
121460
],
"valid",
[
],
"NV8"
],
[
[
121461,
121461
],
"valid"
],
[
[
121462,
121475
],
"valid",
[
],
"NV8"
],
[
[
121476,
121476
],
"valid"
],
[
[
121477,
121483
],
"valid",
[
],
"NV8"
],
[
[
121484,
121498
],
"disallowed"
],
[
[
121499,
121503
],
"valid"
],
[
[
121504,
121504
],
"disallowed"
],
[
[
121505,
121519
],
"valid"
],
[
[
121520,
124927
],
"disallowed"
],
[
[
124928,
125124
],
"valid"
],
[
[
125125,
125126
],
"disallowed"
],
[
[
125127,
125135
],
"valid",
[
],
"NV8"
],
[
[
125136,
125142
],
"valid"
],
[
[
125143,
126463
],
"disallowed"
],
[
[
126464,
126464
],
"mapped",
[
1575
]
],
[
[
126465,
126465
],
"mapped",
[
1576
]
],
[
[
126466,
126466
],
"mapped",
[
1580
]
],
[
[
126467,
126467
],
"mapped",
[
1583
]
],
[
[
126468,
126468
],
"disallowed"
],
[
[
126469,
126469
],
"mapped",
[
1608
]
],
[
[
126470,
126470
],
"mapped",
[
1586
]
],
[
[
126471,
126471
],
"mapped",
[
1581
]
],
[
[
126472,
126472
],
"mapped",
[
1591
]
],
[
[
126473,
126473
],
"mapped",
[
1610
]
],
[
[
126474,
126474
],
"mapped",
[
1603
]
],
[
[
126475,
126475
],
"mapped",
[
1604
]
],
[
[
126476,
126476
],
"mapped",
[
1605
]
],
[
[
126477,
126477
],
"mapped",
[
1606
]
],
[
[
126478,
126478
],
"mapped",
[
1587
]
],
[
[
126479,
126479
],
"mapped",
[
1593
]
],
[
[
126480,
126480
],
"mapped",
[
1601
]
],
[
[
126481,
126481
],
"mapped",
[
1589
]
],
[
[
126482,
126482
],
"mapped",
[
1602
]
],
[
[
126483,
126483
],
"mapped",
[
1585
]
],
[
[
126484,
126484
],
"mapped",
[
1588
]
],
[
[
126485,
126485
],
"mapped",
[
1578
]
],
[
[
126486,
126486
],
"mapped",
[
1579
]
],
[
[
126487,
126487
],
"mapped",
[
1582
]
],
[
[
126488,
126488
],
"mapped",
[
1584
]
],
[
[
126489,
126489
],
"mapped",
[
1590
]
],
[
[
126490,
126490
],
"mapped",
[
1592
]
],
[
[
126491,
126491
],
"mapped",
[
1594
]
],
[
[
126492,
126492
],
"mapped",
[
1646
]
],
[
[
126493,
126493
],
"mapped",
[
1722
]
],
[
[
126494,
126494
],
"mapped",
[
1697
]
],
[
[
126495,
126495
],
"mapped",
[
1647
]
],
[
[
126496,
126496
],
"disallowed"
],
[
[
126497,
126497
],
"mapped",
[
1576
]
],
[
[
126498,
126498
],
"mapped",
[
1580
]
],
[
[
126499,
126499
],
"disallowed"
],
[
[
126500,
126500
],
"mapped",
[
1607
]
],
[
[
126501,
126502
],
"disallowed"
],
[
[
126503,
126503
],
"mapped",
[
1581
]
],
[
[
126504,
126504
],
"disallowed"
],
[
[
126505,
126505
],
"mapped",
[
1610
]
],
[
[
126506,
126506
],
"mapped",
[
1603
]
],
[
[
126507,
126507
],
"mapped",
[
1604
]
],
[
[
126508,
126508
],
"mapped",
[
1605
]
],
[
[
126509,
126509
],
"mapped",
[
1606
]
],
[
[
126510,
126510
],
"mapped",
[
1587
]
],
[
[
126511,
126511
],
"mapped",
[
1593
]
],
[
[
126512,
126512
],
"mapped",
[
1601
]
],
[
[
126513,
126513
],
"mapped",
[
1589
]
],
[
[
126514,
126514
],
"mapped",
[
1602
]
],
[
[
126515,
126515
],
"disallowed"
],
[
[
126516,
126516
],
"mapped",
[
1588
]
],
[
[
126517,
126517
],
"mapped",
[
1578
]
],
[
[
126518,
126518
],
"mapped",
[
1579
]
],
[
[
126519,
126519
],
"mapped",
[
1582
]
],
[
[
126520,
126520
],
"disallowed"
],
[
[
126521,
126521
],
"mapped",
[
1590
]
],
[
[
126522,
126522
],
"disallowed"
],
[
[
126523,
126523
],
"mapped",
[
1594
]
],
[
[
126524,
126529
],
"disallowed"
],
[
[
126530,
126530
],
"mapped",
[
1580
]
],
[
[
126531,
126534
],
"disallowed"
],
[
[
126535,
126535
],
"mapped",
[
1581
]
],
[
[
126536,
126536
],
"disallowed"
],
[
[
126537,
126537
],
"mapped",
[
1610
]
],
[
[
126538,
126538
],
"disallowed"
],
[
[
126539,
126539
],
"mapped",
[
1604
]
],
[
[
126540,
126540
],
"disallowed"
],
[
[
126541,
126541
],
"mapped",
[
1606
]
],
[
[
126542,
126542
],
"mapped",
[
1587
]
],
[
[
126543,
126543
],
"mapped",
[
1593
]
],
[
[
126544,
126544
],
"disallowed"
],
[
[
126545,
126545
],
"mapped",
[
1589
]
],
[
[
126546,
126546
],
"mapped",
[
1602
]
],
[
[
126547,
126547
],
"disallowed"
],
[
[
126548,
126548
],
"mapped",
[
1588
]
],
[
[
126549,
126550
],
"disallowed"
],
[
[
126551,
126551
],
"mapped",
[
1582
]
],
[
[
126552,
126552
],
"disallowed"
],
[
[
126553,
126553
],
"mapped",
[
1590
]
],
[
[
126554,
126554
],
"disallowed"
],
[
[
126555,
126555
],
"mapped",
[
1594
]
],
[
[
126556,
126556
],
"disallowed"
],
[
[
126557,
126557
],
"mapped",
[
1722
]
],
[
[
126558,
126558
],
"disallowed"
],
[
[
126559,
126559
],
"mapped",
[
1647
]
],
[
[
126560,
126560
],
"disallowed"
],
[
[
126561,
126561
],
"mapped",
[
1576
]
],
[
[
126562,
126562
],
"mapped",
[
1580
]
],
[
[
126563,
126563
],
"disallowed"
],
[
[
126564,
126564
],
"mapped",
[
1607
]
],
[
[
126565,
126566
],
"disallowed"
],
[
[
126567,
126567
],
"mapped",
[
1581
]
],
[
[
126568,
126568
],
"mapped",
[
1591
]
],
[
[
126569,
126569
],
"mapped",
[
1610
]
],
[
[
126570,
126570
],
"mapped",
[
1603
]
],
[
[
126571,
126571
],
"disallowed"
],
[
[
126572,
126572
],
"mapped",
[
1605
]
],
[
[
126573,
126573
],
"mapped",
[
1606
]
],
[
[
126574,
126574
],
"mapped",
[
1587
]
],
[
[
126575,
126575
],
"mapped",
[
1593
]
],
[
[
126576,
126576
],
"mapped",
[
1601
]
],
[
[
126577,
126577
],
"mapped",
[
1589
]
],
[
[
126578,
126578
],
"mapped",
[
1602
]
],
[
[
126579,
126579
],
"disallowed"
],
[
[
126580,
126580
],
"mapped",
[
1588
]
],
[
[
126581,
126581
],
"mapped",
[
1578
]
],
[
[
126582,
126582
],
"mapped",
[
1579
]
],
[
[
126583,
126583
],
"mapped",
[
1582
]
],
[
[
126584,
126584
],
"disallowed"
],
[
[
126585,
126585
],
"mapped",
[
1590
]
],
[
[
126586,
126586
],
"mapped",
[
1592
]
],
[
[
126587,
126587
],
"mapped",
[
1594
]
],
[
[
126588,
126588
],
"mapped",
[
1646
]
],
[
[
126589,
126589
],
"disallowed"
],
[
[
126590,
126590
],
"mapped",
[
1697
]
],
[
[
126591,
126591
],
"disallowed"
],
[
[
126592,
126592
],
"mapped",
[
1575
]
],
[
[
126593,
126593
],
"mapped",
[
1576
]
],
[
[
126594,
126594
],
"mapped",
[
1580
]
],
[
[
126595,
126595
],
"mapped",
[
1583
]
],
[
[
126596,
126596
],
"mapped",
[
1607
]
],
[
[
126597,
126597
],
"mapped",
[
1608
]
],
[
[
126598,
126598
],
"mapped",
[
1586
]
],
[
[
126599,
126599
],
"mapped",
[
1581
]
],
[
[
126600,
126600
],
"mapped",
[
1591
]
],
[
[
126601,
126601
],
"mapped",
[
1610
]
],
[
[
126602,
126602
],
"disallowed"
],
[
[
126603,
126603
],
"mapped",
[
1604
]
],
[
[
126604,
126604
],
"mapped",
[
1605
]
],
[
[
126605,
126605
],
"mapped",
[
1606
]
],
[
[
126606,
126606
],
"mapped",
[
1587
]
],
[
[
126607,
126607
],
"mapped",
[
1593
]
],
[
[
126608,
126608
],
"mapped",
[
1601
]
],
[
[
126609,
126609
],
"mapped",
[
1589
]
],
[
[
126610,
126610
],
"mapped",
[
1602
]
],
[
[
126611,
126611
],
"mapped",
[
1585
]
],
[
[
126612,
126612
],
"mapped",
[
1588
]
],
[
[
126613,
126613
],
"mapped",
[
1578
]
],
[
[
126614,
126614
],
"mapped",
[
1579
]
],
[
[
126615,
126615
],
"mapped",
[
1582
]
],
[
[
126616,
126616
],
"mapped",
[
1584
]
],
[
[
126617,
126617
],
"mapped",
[
1590
]
],
[
[
126618,
126618
],
"mapped",
[
1592
]
],
[
[
126619,
126619
],
"mapped",
[
1594
]
],
[
[
126620,
126624
],
"disallowed"
],
[
[
126625,
126625
],
"mapped",
[
1576
]
],
[
[
126626,
126626
],
"mapped",
[
1580
]
],
[
[
126627,
126627
],
"mapped",
[
1583
]
],
[
[
126628,
126628
],
"disallowed"
],
[
[
126629,
126629
],
"mapped",
[
1608
]
],
[
[
126630,
126630
],
"mapped",
[
1586
]
],
[
[
126631,
126631
],
"mapped",
[
1581
]
],
[
[
126632,
126632
],
"mapped",
[
1591
]
],
[
[
126633,
126633
],
"mapped",
[
1610
]
],
[
[
126634,
126634
],
"disallowed"
],
[
[
126635,
126635
],
"mapped",
[
1604
]
],
[
[
126636,
126636
],
"mapped",
[
1605
]
],
[
[
126637,
126637
],
"mapped",
[
1606
]
],
[
[
126638,
126638
],
"mapped",
[
1587
]
],
[
[
126639,
126639
],
"mapped",
[
1593
]
],
[
[
126640,
126640
],
"mapped",
[
1601
]
],
[
[
126641,
126641
],
"mapped",
[
1589
]
],
[
[
126642,
126642
],
"mapped",
[
1602
]
],
[
[
126643,
126643
],
"mapped",
[
1585
]
],
[
[
126644,
126644
],
"mapped",
[
1588
]
],
[
[
126645,
126645
],
"mapped",
[
1578
]
],
[
[
126646,
126646
],
"mapped",
[
1579
]
],
[
[
126647,
126647
],
"mapped",
[
1582
]
],
[
[
126648,
126648
],
"mapped",
[
1584
]
],
[
[
126649,
126649
],
"mapped",
[
1590
]
],
[
[
126650,
126650
],
"mapped",
[
1592
]
],
[
[
126651,
126651
],
"mapped",
[
1594
]
],
[
[
126652,
126703
],
"disallowed"
],
[
[
126704,
126705
],
"valid",
[
],
"NV8"
],
[
[
126706,
126975
],
"disallowed"
],
[
[
126976,
127019
],
"valid",
[
],
"NV8"
],
[
[
127020,
127023
],
"disallowed"
],
[
[
127024,
127123
],
"valid",
[
],
"NV8"
],
[
[
127124,
127135
],
"disallowed"
],
[
[
127136,
127150
],
"valid",
[
],
"NV8"
],
[
[
127151,
127152
],
"disallowed"
],
[
[
127153,
127166
],
"valid",
[
],
"NV8"
],
[
[
127167,
127167
],
"valid",
[
],
"NV8"
],
[
[
127168,
127168
],
"disallowed"
],
[
[
127169,
127183
],
"valid",
[
],
"NV8"
],
[
[
127184,
127184
],
"disallowed"
],
[
[
127185,
127199
],
"valid",
[
],
"NV8"
],
[
[
127200,
127221
],
"valid",
[
],
"NV8"
],
[
[
127222,
127231
],
"disallowed"
],
[
[
127232,
127232
],
"disallowed"
],
[
[
127233,
127233
],
"disallowed_STD3_mapped",
[
48,
44
]
],
[
[
127234,
127234
],
"disallowed_STD3_mapped",
[
49,
44
]
],
[
[
127235,
127235
],
"disallowed_STD3_mapped",
[
50,
44
]
],
[
[
127236,
127236
],
"disallowed_STD3_mapped",
[
51,
44
]
],
[
[
127237,
127237
],
"disallowed_STD3_mapped",
[
52,
44
]
],
[
[
127238,
127238
],
"disallowed_STD3_mapped",
[
53,
44
]
],
[
[
127239,
127239
],
"disallowed_STD3_mapped",
[
54,
44
]
],
[
[
127240,
127240
],
"disallowed_STD3_mapped",
[
55,
44
]
],
[
[
127241,
127241
],
"disallowed_STD3_mapped",
[
56,
44
]
],
[
[
127242,
127242
],
"disallowed_STD3_mapped",
[
57,
44
]
],
[
[
127243,
127244
],
"valid",
[
],
"NV8"
],
[
[
127245,
127247
],
"disallowed"
],
[
[
127248,
127248
],
"disallowed_STD3_mapped",
[
40,
97,
41
]
],
[
[
127249,
127249
],
"disallowed_STD3_mapped",
[
40,
98,
41
]
],
[
[
127250,
127250
],
"disallowed_STD3_mapped",
[
40,
99,
41
]
],
[
[
127251,
127251
],
"disallowed_STD3_mapped",
[
40,
100,
41
]
],
[
[
127252,
127252
],
"disallowed_STD3_mapped",
[
40,
101,
41
]
],
[
[
127253,
127253
],
"disallowed_STD3_mapped",
[
40,
102,
41
]
],
[
[
127254,
127254
],
"disallowed_STD3_mapped",
[
40,
103,
41
]
],
[
[
127255,
127255
],
"disallowed_STD3_mapped",
[
40,
104,
41
]
],
[
[
127256,
127256
],
"disallowed_STD3_mapped",
[
40,
105,
41
]
],
[
[
127257,
127257
],
"disallowed_STD3_mapped",
[
40,
106,
41
]
],
[
[
127258,
127258
],
"disallowed_STD3_mapped",
[
40,
107,
41
]
],
[
[
127259,
127259
],
"disallowed_STD3_mapped",
[
40,
108,
41
]
],
[
[
127260,
127260
],
"disallowed_STD3_mapped",
[
40,
109,
41
]
],
[
[
127261,
127261
],
"disallowed_STD3_mapped",
[
40,
110,
41
]
],
[
[
127262,
127262
],
"disallowed_STD3_mapped",
[
40,
111,
41
]
],
[
[
127263,
127263
],
"disallowed_STD3_mapped",
[
40,
112,
41
]
],
[
[
127264,
127264
],
"disallowed_STD3_mapped",
[
40,
113,
41
]
],
[
[
127265,
127265
],
"disallowed_STD3_mapped",
[
40,
114,
41
]
],
[
[
127266,
127266
],
"disallowed_STD3_mapped",
[
40,
115,
41
]
],
[
[
127267,
127267
],
"disallowed_STD3_mapped",
[
40,
116,
41
]
],
[
[
127268,
127268
],
"disallowed_STD3_mapped",
[
40,
117,
41
]
],
[
[
127269,
127269
],
"disallowed_STD3_mapped",
[
40,
118,
41
]
],
[
[
127270,
127270
],
"disallowed_STD3_mapped",
[
40,
119,
41
]
],
[
[
127271,
127271
],
"disallowed_STD3_mapped",
[
40,
120,
41
]
],
[
[
127272,
127272
],
"disallowed_STD3_mapped",
[
40,
121,
41
]
],
[
[
127273,
127273
],
"disallowed_STD3_mapped",
[
40,
122,
41
]
],
[
[
127274,
127274
],
"mapped",
[
12308,
115,
12309
]
],
[
[
127275,
127275
],
"mapped",
[
99
]
],
[
[
127276,
127276
],
"mapped",
[
114
]
],
[
[
127277,
127277
],
"mapped",
[
99,
100
]
],
[
[
127278,
127278
],
"mapped",
[
119,
122
]
],
[
[
127279,
127279
],
"disallowed"
],
[
[
127280,
127280
],
"mapped",
[
97
]
],
[
[
127281,
127281
],
"mapped",
[
98
]
],
[
[
127282,
127282
],
"mapped",
[
99
]
],
[
[
127283,
127283
],
"mapped",
[
100
]
],
[
[
127284,
127284
],
"mapped",
[
101
]
],
[
[
127285,
127285
],
"mapped",
[
102
]
],
[
[
127286,
127286
],
"mapped",
[
103
]
],
[
[
127287,
127287
],
"mapped",
[
104
]
],
[
[
127288,
127288
],
"mapped",
[
105
]
],
[
[
127289,
127289
],
"mapped",
[
106
]
],
[
[
127290,
127290
],
"mapped",
[
107
]
],
[
[
127291,
127291
],
"mapped",
[
108
]
],
[
[
127292,
127292
],
"mapped",
[
109
]
],
[
[
127293,
127293
],
"mapped",
[
110
]
],
[
[
127294,
127294
],
"mapped",
[
111
]
],
[
[
127295,
127295
],
"mapped",
[
112
]
],
[
[
127296,
127296
],
"mapped",
[
113
]
],
[
[
127297,
127297
],
"mapped",
[
114
]
],
[
[
127298,
127298
],
"mapped",
[
115
]
],
[
[
127299,
127299
],
"mapped",
[
116
]
],
[
[
127300,
127300
],
"mapped",
[
117
]
],
[
[
127301,
127301
],
"mapped",
[
118
]
],
[
[
127302,
127302
],
"mapped",
[
119
]
],
[
[
127303,
127303
],
"mapped",
[
120
]
],
[
[
127304,
127304
],
"mapped",
[
121
]
],
[
[
127305,
127305
],
"mapped",
[
122
]
],
[
[
127306,
127306
],
"mapped",
[
104,
118
]
],
[
[
127307,
127307
],
"mapped",
[
109,
118
]
],
[
[
127308,
127308
],
"mapped",
[
115,
100
]
],
[
[
127309,
127309
],
"mapped",
[
115,
115
]
],
[
[
127310,
127310
],
"mapped",
[
112,
112,
118
]
],
[
[
127311,
127311
],
"mapped",
[
119,
99
]
],
[
[
127312,
127318
],
"valid",
[
],
"NV8"
],
[
[
127319,
127319
],
"valid",
[
],
"NV8"
],
[
[
127320,
127326
],
"valid",
[
],
"NV8"
],
[
[
127327,
127327
],
"valid",
[
],
"NV8"
],
[
[
127328,
127337
],
"valid",
[
],
"NV8"
],
[
[
127338,
127338
],
"mapped",
[
109,
99
]
],
[
[
127339,
127339
],
"mapped",
[
109,
100
]
],
[
[
127340,
127343
],
"disallowed"
],
[
[
127344,
127352
],
"valid",
[
],
"NV8"
],
[
[
127353,
127353
],
"valid",
[
],
"NV8"
],
[
[
127354,
127354
],
"valid",
[
],
"NV8"
],
[
[
127355,
127356
],
"valid",
[
],
"NV8"
],
[
[
127357,
127358
],
"valid",
[
],
"NV8"
],
[
[
127359,
127359
],
"valid",
[
],
"NV8"
],
[
[
127360,
127369
],
"valid",
[
],
"NV8"
],
[
[
127370,
127373
],
"valid",
[
],
"NV8"
],
[
[
127374,
127375
],
"valid",
[
],
"NV8"
],
[
[
127376,
127376
],
"mapped",
[
100,
106
]
],
[
[
127377,
127386
],
"valid",
[
],
"NV8"
],
[
[
127387,
127461
],
"disallowed"
],
[
[
127462,
127487
],
"valid",
[
],
"NV8"
],
[
[
127488,
127488
],
"mapped",
[
12411,
12363
]
],
[
[
127489,
127489
],
"mapped",
[
12467,
12467
]
],
[
[
127490,
127490
],
"mapped",
[
12469
]
],
[
[
127491,
127503
],
"disallowed"
],
[
[
127504,
127504
],
"mapped",
[
25163
]
],
[
[
127505,
127505
],
"mapped",
[
23383
]
],
[
[
127506,
127506
],
"mapped",
[
21452
]
],
[
[
127507,
127507
],
"mapped",
[
12487
]
],
[
[
127508,
127508
],
"mapped",
[
20108
]
],
[
[
127509,
127509
],
"mapped",
[
22810
]
],
[
[
127510,
127510
],
"mapped",
[
35299
]
],
[
[
127511,
127511
],
"mapped",
[
22825
]
],
[
[
127512,
127512
],
"mapped",
[
20132
]
],
[
[
127513,
127513
],
"mapped",
[
26144
]
],
[
[
127514,
127514
],
"mapped",
[
28961
]
],
[
[
127515,
127515
],
"mapped",
[
26009
]
],
[
[
127516,
127516
],
"mapped",
[
21069
]
],
[
[
127517,
127517
],
"mapped",
[
24460
]
],
[
[
127518,
127518
],
"mapped",
[
20877
]
],
[
[
127519,
127519
],
"mapped",
[
26032
]
],
[
[
127520,
127520
],
"mapped",
[
21021
]
],
[
[
127521,
127521
],
"mapped",
[
32066
]
],
[
[
127522,
127522
],
"mapped",
[
29983
]
],
[
[
127523,
127523
],
"mapped",
[
36009
]
],
[
[
127524,
127524
],
"mapped",
[
22768
]
],
[
[
127525,
127525
],
"mapped",
[
21561
]
],
[
[
127526,
127526
],
"mapped",
[
28436
]
],
[
[
127527,
127527
],
"mapped",
[
25237
]
],
[
[
127528,
127528
],
"mapped",
[
25429
]
],
[
[
127529,
127529
],
"mapped",
[
19968
]
],
[
[
127530,
127530
],
"mapped",
[
19977
]
],
[
[
127531,
127531
],
"mapped",
[
36938
]
],
[
[
127532,
127532
],
"mapped",
[
24038
]
],
[
[
127533,
127533
],
"mapped",
[
20013
]
],
[
[
127534,
127534
],
"mapped",
[
21491
]
],
[
[
127535,
127535
],
"mapped",
[
25351
]
],
[
[
127536,
127536
],
"mapped",
[
36208
]
],
[
[
127537,
127537
],
"mapped",
[
25171
]
],
[
[
127538,
127538
],
"mapped",
[
31105
]
],
[
[
127539,
127539
],
"mapped",
[
31354
]
],
[
[
127540,
127540
],
"mapped",
[
21512
]
],
[
[
127541,
127541
],
"mapped",
[
28288
]
],
[
[
127542,
127542
],
"mapped",
[
26377
]
],
[
[
127543,
127543
],
"mapped",
[
26376
]
],
[
[
127544,
127544
],
"mapped",
[
30003
]
],
[
[
127545,
127545
],
"mapped",
[
21106
]
],
[
[
127546,
127546
],
"mapped",
[
21942
]
],
[
[
127547,
127551
],
"disallowed"
],
[
[
127552,
127552
],
"mapped",
[
12308,
26412,
12309
]
],
[
[
127553,
127553
],
"mapped",
[
12308,
19977,
12309
]
],
[
[
127554,
127554
],
"mapped",
[
12308,
20108,
12309
]
],
[
[
127555,
127555
],
"mapped",
[
12308,
23433,
12309
]
],
[
[
127556,
127556
],
"mapped",
[
12308,
28857,
12309
]
],
[
[
127557,
127557
],
"mapped",
[
12308,
25171,
12309
]
],
[
[
127558,
127558
],
"mapped",
[
12308,
30423,
12309
]
],
[
[
127559,
127559
],
"mapped",
[
12308,
21213,
12309
]
],
[
[
127560,
127560
],
"mapped",
[
12308,
25943,
12309
]
],
[
[
127561,
127567
],
"disallowed"
],
[
[
127568,
127568
],
"mapped",
[
24471
]
],
[
[
127569,
127569
],
"mapped",
[
21487
]
],
[
[
127570,
127743
],
"disallowed"
],
[
[
127744,
127776
],
"valid",
[
],
"NV8"
],
[
[
127777,
127788
],
"valid",
[
],
"NV8"
],
[
[
127789,
127791
],
"valid",
[
],
"NV8"
],
[
[
127792,
127797
],
"valid",
[
],
"NV8"
],
[
[
127798,
127798
],
"valid",
[
],
"NV8"
],
[
[
127799,
127868
],
"valid",
[
],
"NV8"
],
[
[
127869,
127869
],
"valid",
[
],
"NV8"
],
[
[
127870,
127871
],
"valid",
[
],
"NV8"
],
[
[
127872,
127891
],
"valid",
[
],
"NV8"
],
[
[
127892,
127903
],
"valid",
[
],
"NV8"
],
[
[
127904,
127940
],
"valid",
[
],
"NV8"
],
[
[
127941,
127941
],
"valid",
[
],
"NV8"
],
[
[
127942,
127946
],
"valid",
[
],
"NV8"
],
[
[
127947,
127950
],
"valid",
[
],
"NV8"
],
[
[
127951,
127955
],
"valid",
[
],
"NV8"
],
[
[
127956,
127967
],
"valid",
[
],
"NV8"
],
[
[
127968,
127984
],
"valid",
[
],
"NV8"
],
[
[
127985,
127991
],
"valid",
[
],
"NV8"
],
[
[
127992,
127999
],
"valid",
[
],
"NV8"
],
[
[
128000,
128062
],
"valid",
[
],
"NV8"
],
[
[
128063,
128063
],
"valid",
[
],
"NV8"
],
[
[
128064,
128064
],
"valid",
[
],
"NV8"
],
[
[
128065,
128065
],
"valid",
[
],
"NV8"
],
[
[
128066,
128247
],
"valid",
[
],
"NV8"
],
[
[
128248,
128248
],
"valid",
[
],
"NV8"
],
[
[
128249,
128252
],
"valid",
[
],
"NV8"
],
[
[
128253,
128254
],
"valid",
[
],
"NV8"
],
[
[
128255,
128255
],
"valid",
[
],
"NV8"
],
[
[
128256,
128317
],
"valid",
[
],
"NV8"
],
[
[
128318,
128319
],
"valid",
[
],
"NV8"
],
[
[
128320,
128323
],
"valid",
[
],
"NV8"
],
[
[
128324,
128330
],
"valid",
[
],
"NV8"
],
[
[
128331,
128335
],
"valid",
[
],
"NV8"
],
[
[
128336,
128359
],
"valid",
[
],
"NV8"
],
[
[
128360,
128377
],
"valid",
[
],
"NV8"
],
[
[
128378,
128378
],
"disallowed"
],
[
[
128379,
128419
],
"valid",
[
],
"NV8"
],
[
[
128420,
128420
],
"disallowed"
],
[
[
128421,
128506
],
"valid",
[
],
"NV8"
],
[
[
128507,
128511
],
"valid",
[
],
"NV8"
],
[
[
128512,
128512
],
"valid",
[
],
"NV8"
],
[
[
128513,
128528
],
"valid",
[
],
"NV8"
],
[
[
128529,
128529
],
"valid",
[
],
"NV8"
],
[
[
128530,
128532
],
"valid",
[
],
"NV8"
],
[
[
128533,
128533
],
"valid",
[
],
"NV8"
],
[
[
128534,
128534
],
"valid",
[
],
"NV8"
],
[
[
128535,
128535
],
"valid",
[
],
"NV8"
],
[
[
128536,
128536
],
"valid",
[
],
"NV8"
],
[
[
128537,
128537
],
"valid",
[
],
"NV8"
],
[
[
128538,
128538
],
"valid",
[
],
"NV8"
],
[
[
128539,
128539
],
"valid",
[
],
"NV8"
],
[
[
128540,
128542
],
"valid",
[
],
"NV8"
],
[
[
128543,
128543
],
"valid",
[
],
"NV8"
],
[
[
128544,
128549
],
"valid",
[
],
"NV8"
],
[
[
128550,
128551
],
"valid",
[
],
"NV8"
],
[
[
128552,
128555
],
"valid",
[
],
"NV8"
],
[
[
128556,
128556
],
"valid",
[
],
"NV8"
],
[
[
128557,
128557
],
"valid",
[
],
"NV8"
],
[
[
128558,
128559
],
"valid",
[
],
"NV8"
],
[
[
128560,
128563
],
"valid",
[
],
"NV8"
],
[
[
128564,
128564
],
"valid",
[
],
"NV8"
],
[
[
128565,
128576
],
"valid",
[
],
"NV8"
],
[
[
128577,
128578
],
"valid",
[
],
"NV8"
],
[
[
128579,
128580
],
"valid",
[
],
"NV8"
],
[
[
128581,
128591
],
"valid",
[
],
"NV8"
],
[
[
128592,
128639
],
"valid",
[
],
"NV8"
],
[
[
128640,
128709
],
"valid",
[
],
"NV8"
],
[
[
128710,
128719
],
"valid",
[
],
"NV8"
],
[
[
128720,
128720
],
"valid",
[
],
"NV8"
],
[
[
128721,
128735
],
"disallowed"
],
[
[
128736,
128748
],
"valid",
[
],
"NV8"
],
[
[
128749,
128751
],
"disallowed"
],
[
[
128752,
128755
],
"valid",
[
],
"NV8"
],
[
[
128756,
128767
],
"disallowed"
],
[
[
128768,
128883
],
"valid",
[
],
"NV8"
],
[
[
128884,
128895
],
"disallowed"
],
[
[
128896,
128980
],
"valid",
[
],
"NV8"
],
[
[
128981,
129023
],
"disallowed"
],
[
[
129024,
129035
],
"valid",
[
],
"NV8"
],
[
[
129036,
129039
],
"disallowed"
],
[
[
129040,
129095
],
"valid",
[
],
"NV8"
],
[
[
129096,
129103
],
"disallowed"
],
[
[
129104,
129113
],
"valid",
[
],
"NV8"
],
[
[
129114,
129119
],
"disallowed"
],
[
[
129120,
129159
],
"valid",
[
],
"NV8"
],
[
[
129160,
129167
],
"disallowed"
],
[
[
129168,
129197
],
"valid",
[
],
"NV8"
],
[
[
129198,
129295
],
"disallowed"
],
[
[
129296,
129304
],
"valid",
[
],
"NV8"
],
[
[
129305,
129407
],
"disallowed"
],
[
[
129408,
129412
],
"valid",
[
],
"NV8"
],
[
[
129413,
129471
],
"disallowed"
],
[
[
129472,
129472
],
"valid",
[
],
"NV8"
],
[
[
129473,
131069
],
"disallowed"
],
[
[
131070,
131071
],
"disallowed"
],
[
[
131072,
173782
],
"valid"
],
[
[
173783,
173823
],
"disallowed"
],
[
[
173824,
177972
],
"valid"
],
[
[
177973,
177983
],
"disallowed"
],
[
[
177984,
178205
],
"valid"
],
[
[
178206,
178207
],
"disallowed"
],
[
[
178208,
183969
],
"valid"
],
[
[
183970,
194559
],
"disallowed"
],
[
[
194560,
194560
],
"mapped",
[
20029
]
],
[
[
194561,
194561
],
"mapped",
[
20024
]
],
[
[
194562,
194562
],
"mapped",
[
20033
]
],
[
[
194563,
194563
],
"mapped",
[
131362
]
],
[
[
194564,
194564
],
"mapped",
[
20320
]
],
[
[
194565,
194565
],
"mapped",
[
20398
]
],
[
[
194566,
194566
],
"mapped",
[
20411
]
],
[
[
194567,
194567
],
"mapped",
[
20482
]
],
[
[
194568,
194568
],
"mapped",
[
20602
]
],
[
[
194569,
194569
],
"mapped",
[
20633
]
],
[
[
194570,
194570
],
"mapped",
[
20711
]
],
[
[
194571,
194571
],
"mapped",
[
20687
]
],
[
[
194572,
194572
],
"mapped",
[
13470
]
],
[
[
194573,
194573
],
"mapped",
[
132666
]
],
[
[
194574,
194574
],
"mapped",
[
20813
]
],
[
[
194575,
194575
],
"mapped",
[
20820
]
],
[
[
194576,
194576
],
"mapped",
[
20836
]
],
[
[
194577,
194577
],
"mapped",
[
20855
]
],
[
[
194578,
194578
],
"mapped",
[
132380
]
],
[
[
194579,
194579
],
"mapped",
[
13497
]
],
[
[
194580,
194580
],
"mapped",
[
20839
]
],
[
[
194581,
194581
],
"mapped",
[
20877
]
],
[
[
194582,
194582
],
"mapped",
[
132427
]
],
[
[
194583,
194583
],
"mapped",
[
20887
]
],
[
[
194584,
194584
],
"mapped",
[
20900
]
],
[
[
194585,
194585
],
"mapped",
[
20172
]
],
[
[
194586,
194586
],
"mapped",
[
20908
]
],
[
[
194587,
194587
],
"mapped",
[
20917
]
],
[
[
194588,
194588
],
"mapped",
[
168415
]
],
[
[
194589,
194589
],
"mapped",
[
20981
]
],
[
[
194590,
194590
],
"mapped",
[
20995
]
],
[
[
194591,
194591
],
"mapped",
[
13535
]
],
[
[
194592,
194592
],
"mapped",
[
21051
]
],
[
[
194593,
194593
],
"mapped",
[
21062
]
],
[
[
194594,
194594
],
"mapped",
[
21106
]
],
[
[
194595,
194595
],
"mapped",
[
21111
]
],
[
[
194596,
194596
],
"mapped",
[
13589
]
],
[
[
194597,
194597
],
"mapped",
[
21191
]
],
[
[
194598,
194598
],
"mapped",
[
21193
]
],
[
[
194599,
194599
],
"mapped",
[
21220
]
],
[
[
194600,
194600
],
"mapped",
[
21242
]
],
[
[
194601,
194601
],
"mapped",
[
21253
]
],
[
[
194602,
194602
],
"mapped",
[
21254
]
],
[
[
194603,
194603
],
"mapped",
[
21271
]
],
[
[
194604,
194604
],
"mapped",
[
21321
]
],
[
[
194605,
194605
],
"mapped",
[
21329
]
],
[
[
194606,
194606
],
"mapped",
[
21338
]
],
[
[
194607,
194607
],
"mapped",
[
21363
]
],
[
[
194608,
194608
],
"mapped",
[
21373
]
],
[
[
194609,
194611
],
"mapped",
[
21375
]
],
[
[
194612,
194612
],
"mapped",
[
133676
]
],
[
[
194613,
194613
],
"mapped",
[
28784
]
],
[
[
194614,
194614
],
"mapped",
[
21450
]
],
[
[
194615,
194615
],
"mapped",
[
21471
]
],
[
[
194616,
194616
],
"mapped",
[
133987
]
],
[
[
194617,
194617
],
"mapped",
[
21483
]
],
[
[
194618,
194618
],
"mapped",
[
21489
]
],
[
[
194619,
194619
],
"mapped",
[
21510
]
],
[
[
194620,
194620
],
"mapped",
[
21662
]
],
[
[
194621,
194621
],
"mapped",
[
21560
]
],
[
[
194622,
194622
],
"mapped",
[
21576
]
],
[
[
194623,
194623
],
"mapped",
[
21608
]
],
[
[
194624,
194624
],
"mapped",
[
21666
]
],
[
[
194625,
194625
],
"mapped",
[
21750
]
],
[
[
194626,
194626
],
"mapped",
[
21776
]
],
[
[
194627,
194627
],
"mapped",
[
21843
]
],
[
[
194628,
194628
],
"mapped",
[
21859
]
],
[
[
194629,
194630
],
"mapped",
[
21892
]
],
[
[
194631,
194631
],
"mapped",
[
21913
]
],
[
[
194632,
194632
],
"mapped",
[
21931
]
],
[
[
194633,
194633
],
"mapped",
[
21939
]
],
[
[
194634,
194634
],
"mapped",
[
21954
]
],
[
[
194635,
194635
],
"mapped",
[
22294
]
],
[
[
194636,
194636
],
"mapped",
[
22022
]
],
[
[
194637,
194637
],
"mapped",
[
22295
]
],
[
[
194638,
194638
],
"mapped",
[
22097
]
],
[
[
194639,
194639
],
"mapped",
[
22132
]
],
[
[
194640,
194640
],
"mapped",
[
20999
]
],
[
[
194641,
194641
],
"mapped",
[
22766
]
],
[
[
194642,
194642
],
"mapped",
[
22478
]
],
[
[
194643,
194643
],
"mapped",
[
22516
]
],
[
[
194644,
194644
],
"mapped",
[
22541
]
],
[
[
194645,
194645
],
"mapped",
[
22411
]
],
[
[
194646,
194646
],
"mapped",
[
22578
]
],
[
[
194647,
194647
],
"mapped",
[
22577
]
],
[
[
194648,
194648
],
"mapped",
[
22700
]
],
[
[
194649,
194649
],
"mapped",
[
136420
]
],
[
[
194650,
194650
],
"mapped",
[
22770
]
],
[
[
194651,
194651
],
"mapped",
[
22775
]
],
[
[
194652,
194652
],
"mapped",
[
22790
]
],
[
[
194653,
194653
],
"mapped",
[
22810
]
],
[
[
194654,
194654
],
"mapped",
[
22818
]
],
[
[
194655,
194655
],
"mapped",
[
22882
]
],
[
[
194656,
194656
],
"mapped",
[
136872
]
],
[
[
194657,
194657
],
"mapped",
[
136938
]
],
[
[
194658,
194658
],
"mapped",
[
23020
]
],
[
[
194659,
194659
],
"mapped",
[
23067
]
],
[
[
194660,
194660
],
"mapped",
[
23079
]
],
[
[
194661,
194661
],
"mapped",
[
23000
]
],
[
[
194662,
194662
],
"mapped",
[
23142
]
],
[
[
194663,
194663
],
"mapped",
[
14062
]
],
[
[
194664,
194664
],
"disallowed"
],
[
[
194665,
194665
],
"mapped",
[
23304
]
],
[
[
194666,
194667
],
"mapped",
[
23358
]
],
[
[
194668,
194668
],
"mapped",
[
137672
]
],
[
[
194669,
194669
],
"mapped",
[
23491
]
],
[
[
194670,
194670
],
"mapped",
[
23512
]
],
[
[
194671,
194671
],
"mapped",
[
23527
]
],
[
[
194672,
194672
],
"mapped",
[
23539
]
],
[
[
194673,
194673
],
"mapped",
[
138008
]
],
[
[
194674,
194674
],
"mapped",
[
23551
]
],
[
[
194675,
194675
],
"mapped",
[
23558
]
],
[
[
194676,
194676
],
"disallowed"
],
[
[
194677,
194677
],
"mapped",
[
23586
]
],
[
[
194678,
194678
],
"mapped",
[
14209
]
],
[
[
194679,
194679
],
"mapped",
[
23648
]
],
[
[
194680,
194680
],
"mapped",
[
23662
]
],
[
[
194681,
194681
],
"mapped",
[
23744
]
],
[
[
194682,
194682
],
"mapped",
[
23693
]
],
[
[
194683,
194683
],
"mapped",
[
138724
]
],
[
[
194684,
194684
],
"mapped",
[
23875
]
],
[
[
194685,
194685
],
"mapped",
[
138726
]
],
[
[
194686,
194686
],
"mapped",
[
23918
]
],
[
[
194687,
194687
],
"mapped",
[
23915
]
],
[
[
194688,
194688
],
"mapped",
[
23932
]
],
[
[
194689,
194689
],
"mapped",
[
24033
]
],
[
[
194690,
194690
],
"mapped",
[
24034
]
],
[
[
194691,
194691
],
"mapped",
[
14383
]
],
[
[
194692,
194692
],
"mapped",
[
24061
]
],
[
[
194693,
194693
],
"mapped",
[
24104
]
],
[
[
194694,
194694
],
"mapped",
[
24125
]
],
[
[
194695,
194695
],
"mapped",
[
24169
]
],
[
[
194696,
194696
],
"mapped",
[
14434
]
],
[
[
194697,
194697
],
"mapped",
[
139651
]
],
[
[
194698,
194698
],
"mapped",
[
14460
]
],
[
[
194699,
194699
],
"mapped",
[
24240
]
],
[
[
194700,
194700
],
"mapped",
[
24243
]
],
[
[
194701,
194701
],
"mapped",
[
24246
]
],
[
[
194702,
194702
],
"mapped",
[
24266
]
],
[
[
194703,
194703
],
"mapped",
[
172946
]
],
[
[
194704,
194704
],
"mapped",
[
24318
]
],
[
[
194705,
194706
],
"mapped",
[
140081
]
],
[
[
194707,
194707
],
"mapped",
[
33281
]
],
[
[
194708,
194709
],
"mapped",
[
24354
]
],
[
[
194710,
194710
],
"mapped",
[
14535
]
],
[
[
194711,
194711
],
"mapped",
[
144056
]
],
[
[
194712,
194712
],
"mapped",
[
156122
]
],
[
[
194713,
194713
],
"mapped",
[
24418
]
],
[
[
194714,
194714
],
"mapped",
[
24427
]
],
[
[
194715,
194715
],
"mapped",
[
14563
]
],
[
[
194716,
194716
],
"mapped",
[
24474
]
],
[
[
194717,
194717
],
"mapped",
[
24525
]
],
[
[
194718,
194718
],
"mapped",
[
24535
]
],
[
[
194719,
194719
],
"mapped",
[
24569
]
],
[
[
194720,
194720
],
"mapped",
[
24705
]
],
[
[
194721,
194721
],
"mapped",
[
14650
]
],
[
[
194722,
194722
],
"mapped",
[
14620
]
],
[
[
194723,
194723
],
"mapped",
[
24724
]
],
[
[
194724,
194724
],
"mapped",
[
141012
]
],
[
[
194725,
194725
],
"mapped",
[
24775
]
],
[
[
194726,
194726
],
"mapped",
[
24904
]
],
[
[
194727,
194727
],
"mapped",
[
24908
]
],
[
[
194728,
194728
],
"mapped",
[
24910
]
],
[
[
194729,
194729
],
"mapped",
[
24908
]
],
[
[
194730,
194730
],
"mapped",
[
24954
]
],
[
[
194731,
194731
],
"mapped",
[
24974
]
],
[
[
194732,
194732
],
"mapped",
[
25010
]
],
[
[
194733,
194733
],
"mapped",
[
24996
]
],
[
[
194734,
194734
],
"mapped",
[
25007
]
],
[
[
194735,
194735
],
"mapped",
[
25054
]
],
[
[
194736,
194736
],
"mapped",
[
25074
]
],
[
[
194737,
194737
],
"mapped",
[
25078
]
],
[
[
194738,
194738
],
"mapped",
[
25104
]
],
[
[
194739,
194739
],
"mapped",
[
25115
]
],
[
[
194740,
194740
],
"mapped",
[
25181
]
],
[
[
194741,
194741
],
"mapped",
[
25265
]
],
[
[
194742,
194742
],
"mapped",
[
25300
]
],
[
[
194743,
194743
],
"mapped",
[
25424
]
],
[
[
194744,
194744
],
"mapped",
[
142092
]
],
[
[
194745,
194745
],
"mapped",
[
25405
]
],
[
[
194746,
194746
],
"mapped",
[
25340
]
],
[
[
194747,
194747
],
"mapped",
[
25448
]
],
[
[
194748,
194748
],
"mapped",
[
25475
]
],
[
[
194749,
194749
],
"mapped",
[
25572
]
],
[
[
194750,
194750
],
"mapped",
[
142321
]
],
[
[
194751,
194751
],
"mapped",
[
25634
]
],
[
[
194752,
194752
],
"mapped",
[
25541
]
],
[
[
194753,
194753
],
"mapped",
[
25513
]
],
[
[
194754,
194754
],
"mapped",
[
14894
]
],
[
[
194755,
194755
],
"mapped",
[
25705
]
],
[
[
194756,
194756
],
"mapped",
[
25726
]
],
[
[
194757,
194757
],
"mapped",
[
25757
]
],
[
[
194758,
194758
],
"mapped",
[
25719
]
],
[
[
194759,
194759
],
"mapped",
[
14956
]
],
[
[
194760,
194760
],
"mapped",
[
25935
]
],
[
[
194761,
194761
],
"mapped",
[
25964
]
],
[
[
194762,
194762
],
"mapped",
[
143370
]
],
[
[
194763,
194763
],
"mapped",
[
26083
]
],
[
[
194764,
194764
],
"mapped",
[
26360
]
],
[
[
194765,
194765
],
"mapped",
[
26185
]
],
[
[
194766,
194766
],
"mapped",
[
15129
]
],
[
[
194767,
194767
],
"mapped",
[
26257
]
],
[
[
194768,
194768
],
"mapped",
[
15112
]
],
[
[
194769,
194769
],
"mapped",
[
15076
]
],
[
[
194770,
194770
],
"mapped",
[
20882
]
],
[
[
194771,
194771
],
"mapped",
[
20885
]
],
[
[
194772,
194772
],
"mapped",
[
26368
]
],
[
[
194773,
194773
],
"mapped",
[
26268
]
],
[
[
194774,
194774
],
"mapped",
[
32941
]
],
[
[
194775,
194775
],
"mapped",
[
17369
]
],
[
[
194776,
194776
],
"mapped",
[
26391
]
],
[
[
194777,
194777
],
"mapped",
[
26395
]
],
[
[
194778,
194778
],
"mapped",
[
26401
]
],
[
[
194779,
194779
],
"mapped",
[
26462
]
],
[
[
194780,
194780
],
"mapped",
[
26451
]
],
[
[
194781,
194781
],
"mapped",
[
144323
]
],
[
[
194782,
194782
],
"mapped",
[
15177
]
],
[
[
194783,
194783
],
"mapped",
[
26618
]
],
[
[
194784,
194784
],
"mapped",
[
26501
]
],
[
[
194785,
194785
],
"mapped",
[
26706
]
],
[
[
194786,
194786
],
"mapped",
[
26757
]
],
[
[
194787,
194787
],
"mapped",
[
144493
]
],
[
[
194788,
194788
],
"mapped",
[
26766
]
],
[
[
194789,
194789
],
"mapped",
[
26655
]
],
[
[
194790,
194790
],
"mapped",
[
26900
]
],
[
[
194791,
194791
],
"mapped",
[
15261
]
],
[
[
194792,
194792
],
"mapped",
[
26946
]
],
[
[
194793,
194793
],
"mapped",
[
27043
]
],
[
[
194794,
194794
],
"mapped",
[
27114
]
],
[
[
194795,
194795
],
"mapped",
[
27304
]
],
[
[
194796,
194796
],
"mapped",
[
145059
]
],
[
[
194797,
194797
],
"mapped",
[
27355
]
],
[
[
194798,
194798
],
"mapped",
[
15384
]
],
[
[
194799,
194799
],
"mapped",
[
27425
]
],
[
[
194800,
194800
],
"mapped",
[
145575
]
],
[
[
194801,
194801
],
"mapped",
[
27476
]
],
[
[
194802,
194802
],
"mapped",
[
15438
]
],
[
[
194803,
194803
],
"mapped",
[
27506
]
],
[
[
194804,
194804
],
"mapped",
[
27551
]
],
[
[
194805,
194805
],
"mapped",
[
27578
]
],
[
[
194806,
194806
],
"mapped",
[
27579
]
],
[
[
194807,
194807
],
"mapped",
[
146061
]
],
[
[
194808,
194808
],
"mapped",
[
138507
]
],
[
[
194809,
194809
],
"mapped",
[
146170
]
],
[
[
194810,
194810
],
"mapped",
[
27726
]
],
[
[
194811,
194811
],
"mapped",
[
146620
]
],
[
[
194812,
194812
],
"mapped",
[
27839
]
],
[
[
194813,
194813
],
"mapped",
[
27853
]
],
[
[
194814,
194814
],
"mapped",
[
27751
]
],
[
[
194815,
194815
],
"mapped",
[
27926
]
],
[
[
194816,
194816
],
"mapped",
[
27966
]
],
[
[
194817,
194817
],
"mapped",
[
28023
]
],
[
[
194818,
194818
],
"mapped",
[
27969
]
],
[
[
194819,
194819
],
"mapped",
[
28009
]
],
[
[
194820,
194820
],
"mapped",
[
28024
]
],
[
[
194821,
194821
],
"mapped",
[
28037
]
],
[
[
194822,
194822
],
"mapped",
[
146718
]
],
[
[
194823,
194823
],
"mapped",
[
27956
]
],
[
[
194824,
194824
],
"mapped",
[
28207
]
],
[
[
194825,
194825
],
"mapped",
[
28270
]
],
[
[
194826,
194826
],
"mapped",
[
15667
]
],
[
[
194827,
194827
],
"mapped",
[
28363
]
],
[
[
194828,
194828
],
"mapped",
[
28359
]
],
[
[
194829,
194829
],
"mapped",
[
147153
]
],
[
[
194830,
194830
],
"mapped",
[
28153
]
],
[
[
194831,
194831
],
"mapped",
[
28526
]
],
[
[
194832,
194832
],
"mapped",
[
147294
]
],
[
[
194833,
194833
],
"mapped",
[
147342
]
],
[
[
194834,
194834
],
"mapped",
[
28614
]
],
[
[
194835,
194835
],
"mapped",
[
28729
]
],
[
[
194836,
194836
],
"mapped",
[
28702
]
],
[
[
194837,
194837
],
"mapped",
[
28699
]
],
[
[
194838,
194838
],
"mapped",
[
15766
]
],
[
[
194839,
194839
],
"mapped",
[
28746
]
],
[
[
194840,
194840
],
"mapped",
[
28797
]
],
[
[
194841,
194841
],
"mapped",
[
28791
]
],
[
[
194842,
194842
],
"mapped",
[
28845
]
],
[
[
194843,
194843
],
"mapped",
[
132389
]
],
[
[
194844,
194844
],
"mapped",
[
28997
]
],
[
[
194845,
194845
],
"mapped",
[
148067
]
],
[
[
194846,
194846
],
"mapped",
[
29084
]
],
[
[
194847,
194847
],
"disallowed"
],
[
[
194848,
194848
],
"mapped",
[
29224
]
],
[
[
194849,
194849
],
"mapped",
[
29237
]
],
[
[
194850,
194850
],
"mapped",
[
29264
]
],
[
[
194851,
194851
],
"mapped",
[
149000
]
],
[
[
194852,
194852
],
"mapped",
[
29312
]
],
[
[
194853,
194853
],
"mapped",
[
29333
]
],
[
[
194854,
194854
],
"mapped",
[
149301
]
],
[
[
194855,
194855
],
"mapped",
[
149524
]
],
[
[
194856,
194856
],
"mapped",
[
29562
]
],
[
[
194857,
194857
],
"mapped",
[
29579
]
],
[
[
194858,
194858
],
"mapped",
[
16044
]
],
[
[
194859,
194859
],
"mapped",
[
29605
]
],
[
[
194860,
194861
],
"mapped",
[
16056
]
],
[
[
194862,
194862
],
"mapped",
[
29767
]
],
[
[
194863,
194863
],
"mapped",
[
29788
]
],
[
[
194864,
194864
],
"mapped",
[
29809
]
],
[
[
194865,
194865
],
"mapped",
[
29829
]
],
[
[
194866,
194866
],
"mapped",
[
29898
]
],
[
[
194867,
194867
],
"mapped",
[
16155
]
],
[
[
194868,
194868
],
"mapped",
[
29988
]
],
[
[
194869,
194869
],
"mapped",
[
150582
]
],
[
[
194870,
194870
],
"mapped",
[
30014
]
],
[
[
194871,
194871
],
"mapped",
[
150674
]
],
[
[
194872,
194872
],
"mapped",
[
30064
]
],
[
[
194873,
194873
],
"mapped",
[
139679
]
],
[
[
194874,
194874
],
"mapped",
[
30224
]
],
[
[
194875,
194875
],
"mapped",
[
151457
]
],
[
[
194876,
194876
],
"mapped",
[
151480
]
],
[
[
194877,
194877
],
"mapped",
[
151620
]
],
[
[
194878,
194878
],
"mapped",
[
16380
]
],
[
[
194879,
194879
],
"mapped",
[
16392
]
],
[
[
194880,
194880
],
"mapped",
[
30452
]
],
[
[
194881,
194881
],
"mapped",
[
151795
]
],
[
[
194882,
194882
],
"mapped",
[
151794
]
],
[
[
194883,
194883
],
"mapped",
[
151833
]
],
[
[
194884,
194884
],
"mapped",
[
151859
]
],
[
[
194885,
194885
],
"mapped",
[
30494
]
],
[
[
194886,
194887
],
"mapped",
[
30495
]
],
[
[
194888,
194888
],
"mapped",
[
30538
]
],
[
[
194889,
194889
],
"mapped",
[
16441
]
],
[
[
194890,
194890
],
"mapped",
[
30603
]
],
[
[
194891,
194891
],
"mapped",
[
16454
]
],
[
[
194892,
194892
],
"mapped",
[
16534
]
],
[
[
194893,
194893
],
"mapped",
[
152605
]
],
[
[
194894,
194894
],
"mapped",
[
30798
]
],
[
[
194895,
194895
],
"mapped",
[
30860
]
],
[
[
194896,
194896
],
"mapped",
[
30924
]
],
[
[
194897,
194897
],
"mapped",
[
16611
]
],
[
[
194898,
194898
],
"mapped",
[
153126
]
],
[
[
194899,
194899
],
"mapped",
[
31062
]
],
[
[
194900,
194900
],
"mapped",
[
153242
]
],
[
[
194901,
194901
],
"mapped",
[
153285
]
],
[
[
194902,
194902
],
"mapped",
[
31119
]
],
[
[
194903,
194903
],
"mapped",
[
31211
]
],
[
[
194904,
194904
],
"mapped",
[
16687
]
],
[
[
194905,
194905
],
"mapped",
[
31296
]
],
[
[
194906,
194906
],
"mapped",
[
31306
]
],
[
[
194907,
194907
],
"mapped",
[
31311
]
],
[
[
194908,
194908
],
"mapped",
[
153980
]
],
[
[
194909,
194910
],
"mapped",
[
154279
]
],
[
[
194911,
194911
],
"disallowed"
],
[
[
194912,
194912
],
"mapped",
[
16898
]
],
[
[
194913,
194913
],
"mapped",
[
154539
]
],
[
[
194914,
194914
],
"mapped",
[
31686
]
],
[
[
194915,
194915
],
"mapped",
[
31689
]
],
[
[
194916,
194916
],
"mapped",
[
16935
]
],
[
[
194917,
194917
],
"mapped",
[
154752
]
],
[
[
194918,
194918
],
"mapped",
[
31954
]
],
[
[
194919,
194919
],
"mapped",
[
17056
]
],
[
[
194920,
194920
],
"mapped",
[
31976
]
],
[
[
194921,
194921
],
"mapped",
[
31971
]
],
[
[
194922,
194922
],
"mapped",
[
32000
]
],
[
[
194923,
194923
],
"mapped",
[
155526
]
],
[
[
194924,
194924
],
"mapped",
[
32099
]
],
[
[
194925,
194925
],
"mapped",
[
17153
]
],
[
[
194926,
194926
],
"mapped",
[
32199
]
],
[
[
194927,
194927
],
"mapped",
[
32258
]
],
[
[
194928,
194928
],
"mapped",
[
32325
]
],
[
[
194929,
194929
],
"mapped",
[
17204
]
],
[
[
194930,
194930
],
"mapped",
[
156200
]
],
[
[
194931,
194931
],
"mapped",
[
156231
]
],
[
[
194932,
194932
],
"mapped",
[
17241
]
],
[
[
194933,
194933
],
"mapped",
[
156377
]
],
[
[
194934,
194934
],
"mapped",
[
32634
]
],
[
[
194935,
194935
],
"mapped",
[
156478
]
],
[
[
194936,
194936
],
"mapped",
[
32661
]
],
[
[
194937,
194937
],
"mapped",
[
32762
]
],
[
[
194938,
194938
],
"mapped",
[
32773
]
],
[
[
194939,
194939
],
"mapped",
[
156890
]
],
[
[
194940,
194940
],
"mapped",
[
156963
]
],
[
[
194941,
194941
],
"mapped",
[
32864
]
],
[
[
194942,
194942
],
"mapped",
[
157096
]
],
[
[
194943,
194943
],
"mapped",
[
32880
]
],
[
[
194944,
194944
],
"mapped",
[
144223
]
],
[
[
194945,
194945
],
"mapped",
[
17365
]
],
[
[
194946,
194946
],
"mapped",
[
32946
]
],
[
[
194947,
194947
],
"mapped",
[
33027
]
],
[
[
194948,
194948
],
"mapped",
[
17419
]
],
[
[
194949,
194949
],
"mapped",
[
33086
]
],
[
[
194950,
194950
],
"mapped",
[
23221
]
],
[
[
194951,
194951
],
"mapped",
[
157607
]
],
[
[
194952,
194952
],
"mapped",
[
157621
]
],
[
[
194953,
194953
],
"mapped",
[
144275
]
],
[
[
194954,
194954
],
"mapped",
[
144284
]
],
[
[
194955,
194955
],
"mapped",
[
33281
]
],
[
[
194956,
194956
],
"mapped",
[
33284
]
],
[
[
194957,
194957
],
"mapped",
[
36766
]
],
[
[
194958,
194958
],
"mapped",
[
17515
]
],
[
[
194959,
194959
],
"mapped",
[
33425
]
],
[
[
194960,
194960
],
"mapped",
[
33419
]
],
[
[
194961,
194961
],
"mapped",
[
33437
]
],
[
[
194962,
194962
],
"mapped",
[
21171
]
],
[
[
194963,
194963
],
"mapped",
[
33457
]
],
[
[
194964,
194964
],
"mapped",
[
33459
]
],
[
[
194965,
194965
],
"mapped",
[
33469
]
],
[
[
194966,
194966
],
"mapped",
[
33510
]
],
[
[
194967,
194967
],
"mapped",
[
158524
]
],
[
[
194968,
194968
],
"mapped",
[
33509
]
],
[
[
194969,
194969
],
"mapped",
[
33565
]
],
[
[
194970,
194970
],
"mapped",
[
33635
]
],
[
[
194971,
194971
],
"mapped",
[
33709
]
],
[
[
194972,
194972
],
"mapped",
[
33571
]
],
[
[
194973,
194973
],
"mapped",
[
33725
]
],
[
[
194974,
194974
],
"mapped",
[
33767
]
],
[
[
194975,
194975
],
"mapped",
[
33879
]
],
[
[
194976,
194976
],
"mapped",
[
33619
]
],
[
[
194977,
194977
],
"mapped",
[
33738
]
],
[
[
194978,
194978
],
"mapped",
[
33740
]
],
[
[
194979,
194979
],
"mapped",
[
33756
]
],
[
[
194980,
194980
],
"mapped",
[
158774
]
],
[
[
194981,
194981
],
"mapped",
[
159083
]
],
[
[
194982,
194982
],
"mapped",
[
158933
]
],
[
[
194983,
194983
],
"mapped",
[
17707
]
],
[
[
194984,
194984
],
"mapped",
[
34033
]
],
[
[
194985,
194985
],
"mapped",
[
34035
]
],
[
[
194986,
194986
],
"mapped",
[
34070
]
],
[
[
194987,
194987
],
"mapped",
[
160714
]
],
[
[
194988,
194988
],
"mapped",
[
34148
]
],
[
[
194989,
194989
],
"mapped",
[
159532
]
],
[
[
194990,
194990
],
"mapped",
[
17757
]
],
[
[
194991,
194991
],
"mapped",
[
17761
]
],
[
[
194992,
194992
],
"mapped",
[
159665
]
],
[
[
194993,
194993
],
"mapped",
[
159954
]
],
[
[
194994,
194994
],
"mapped",
[
17771
]
],
[
[
194995,
194995
],
"mapped",
[
34384
]
],
[
[
194996,
194996
],
"mapped",
[
34396
]
],
[
[
194997,
194997
],
"mapped",
[
34407
]
],
[
[
194998,
194998
],
"mapped",
[
34409
]
],
[
[
194999,
194999
],
"mapped",
[
34473
]
],
[
[
195000,
195000
],
"mapped",
[
34440
]
],
[
[
195001,
195001
],
"mapped",
[
34574
]
],
[
[
195002,
195002
],
"mapped",
[
34530
]
],
[
[
195003,
195003
],
"mapped",
[
34681
]
],
[
[
195004,
195004
],
"mapped",
[
34600
]
],
[
[
195005,
195005
],
"mapped",
[
34667
]
],
[
[
195006,
195006
],
"mapped",
[
34694
]
],
[
[
195007,
195007
],
"disallowed"
],
[
[
195008,
195008
],
"mapped",
[
34785
]
],
[
[
195009,
195009
],
"mapped",
[
34817
]
],
[
[
195010,
195010
],
"mapped",
[
17913
]
],
[
[
195011,
195011
],
"mapped",
[
34912
]
],
[
[
195012,
195012
],
"mapped",
[
34915
]
],
[
[
195013,
195013
],
"mapped",
[
161383
]
],
[
[
195014,
195014
],
"mapped",
[
35031
]
],
[
[
195015,
195015
],
"mapped",
[
35038
]
],
[
[
195016,
195016
],
"mapped",
[
17973
]
],
[
[
195017,
195017
],
"mapped",
[
35066
]
],
[
[
195018,
195018
],
"mapped",
[
13499
]
],
[
[
195019,
195019
],
"mapped",
[
161966
]
],
[
[
195020,
195020
],
"mapped",
[
162150
]
],
[
[
195021,
195021
],
"mapped",
[
18110
]
],
[
[
195022,
195022
],
"mapped",
[
18119
]
],
[
[
195023,
195023
],
"mapped",
[
35488
]
],
[
[
195024,
195024
],
"mapped",
[
35565
]
],
[
[
195025,
195025
],
"mapped",
[
35722
]
],
[
[
195026,
195026
],
"mapped",
[
35925
]
],
[
[
195027,
195027
],
"mapped",
[
162984
]
],
[
[
195028,
195028
],
"mapped",
[
36011
]
],
[
[
195029,
195029
],
"mapped",
[
36033
]
],
[
[
195030,
195030
],
"mapped",
[
36123
]
],
[
[
195031,
195031
],
"mapped",
[
36215
]
],
[
[
195032,
195032
],
"mapped",
[
163631
]
],
[
[
195033,
195033
],
"mapped",
[
133124
]
],
[
[
195034,
195034
],
"mapped",
[
36299
]
],
[
[
195035,
195035
],
"mapped",
[
36284
]
],
[
[
195036,
195036
],
"mapped",
[
36336
]
],
[
[
195037,
195037
],
"mapped",
[
133342
]
],
[
[
195038,
195038
],
"mapped",
[
36564
]
],
[
[
195039,
195039
],
"mapped",
[
36664
]
],
[
[
195040,
195040
],
"mapped",
[
165330
]
],
[
[
195041,
195041
],
"mapped",
[
165357
]
],
[
[
195042,
195042
],
"mapped",
[
37012
]
],
[
[
195043,
195043
],
"mapped",
[
37105
]
],
[
[
195044,
195044
],
"mapped",
[
37137
]
],
[
[
195045,
195045
],
"mapped",
[
165678
]
],
[
[
195046,
195046
],
"mapped",
[
37147
]
],
[
[
195047,
195047
],
"mapped",
[
37432
]
],
[
[
195048,
195048
],
"mapped",
[
37591
]
],
[
[
195049,
195049
],
"mapped",
[
37592
]
],
[
[
195050,
195050
],
"mapped",
[
37500
]
],
[
[
195051,
195051
],
"mapped",
[
37881
]
],
[
[
195052,
195052
],
"mapped",
[
37909
]
],
[
[
195053,
195053
],
"mapped",
[
166906
]
],
[
[
195054,
195054
],
"mapped",
[
38283
]
],
[
[
195055,
195055
],
"mapped",
[
18837
]
],
[
[
195056,
195056
],
"mapped",
[
38327
]
],
[
[
195057,
195057
],
"mapped",
[
167287
]
],
[
[
195058,
195058
],
"mapped",
[
18918
]
],
[
[
195059,
195059
],
"mapped",
[
38595
]
],
[
[
195060,
195060
],
"mapped",
[
23986
]
],
[
[
195061,
195061
],
"mapped",
[
38691
]
],
[
[
195062,
195062
],
"mapped",
[
168261
]
],
[
[
195063,
195063
],
"mapped",
[
168474
]
],
[
[
195064,
195064
],
"mapped",
[
19054
]
],
[
[
195065,
195065
],
"mapped",
[
19062
]
],
[
[
195066,
195066
],
"mapped",
[
38880
]
],
[
[
195067,
195067
],
"mapped",
[
168970
]
],
[
[
195068,
195068
],
"mapped",
[
19122
]
],
[
[
195069,
195069
],
"mapped",
[
169110
]
],
[
[
195070,
195071
],
"mapped",
[
38923
]
],
[
[
195072,
195072
],
"mapped",
[
38953
]
],
[
[
195073,
195073
],
"mapped",
[
169398
]
],
[
[
195074,
195074
],
"mapped",
[
39138
]
],
[
[
195075,
195075
],
"mapped",
[
19251
]
],
[
[
195076,
195076
],
"mapped",
[
39209
]
],
[
[
195077,
195077
],
"mapped",
[
39335
]
],
[
[
195078,
195078
],
"mapped",
[
39362
]
],
[
[
195079,
195079
],
"mapped",
[
39422
]
],
[
[
195080,
195080
],
"mapped",
[
19406
]
],
[
[
195081,
195081
],
"mapped",
[
170800
]
],
[
[
195082,
195082
],
"mapped",
[
39698
]
],
[
[
195083,
195083
],
"mapped",
[
40000
]
],
[
[
195084,
195084
],
"mapped",
[
40189
]
],
[
[
195085,
195085
],
"mapped",
[
19662
]
],
[
[
195086,
195086
],
"mapped",
[
19693
]
],
[
[
195087,
195087
],
"mapped",
[
40295
]
],
[
[
195088,
195088
],
"mapped",
[
172238
]
],
[
[
195089,
195089
],
"mapped",
[
19704
]
],
[
[
195090,
195090
],
"mapped",
[
172293
]
],
[
[
195091,
195091
],
"mapped",
[
172558
]
],
[
[
195092,
195092
],
"mapped",
[
172689
]
],
[
[
195093,
195093
],
"mapped",
[
40635
]
],
[
[
195094,
195094
],
"mapped",
[
19798
]
],
[
[
195095,
195095
],
"mapped",
[
40697
]
],
[
[
195096,
195096
],
"mapped",
[
40702
]
],
[
[
195097,
195097
],
"mapped",
[
40709
]
],
[
[
195098,
195098
],
"mapped",
[
40719
]
],
[
[
195099,
195099
],
"mapped",
[
40726
]
],
[
[
195100,
195100
],
"mapped",
[
40763
]
],
[
[
195101,
195101
],
"mapped",
[
173568
]
],
[
[
195102,
196605
],
"disallowed"
],
[
[
196606,
196607
],
"disallowed"
],
[
[
196608,
262141
],
"disallowed"
],
[
[
262142,
262143
],
"disallowed"
],
[
[
262144,
327677
],
"disallowed"
],
[
[
327678,
327679
],
"disallowed"
],
[
[
327680,
393213
],
"disallowed"
],
[
[
393214,
393215
],
"disallowed"
],
[
[
393216,
458749
],
"disallowed"
],
[
[
458750,
458751
],
"disallowed"
],
[
[
458752,
524285
],
"disallowed"
],
[
[
524286,
524287
],
"disallowed"
],
[
[
524288,
589821
],
"disallowed"
],
[
[
589822,
589823
],
"disallowed"
],
[
[
589824,
655357
],
"disallowed"
],
[
[
655358,
655359
],
"disallowed"
],
[
[
655360,
720893
],
"disallowed"
],
[
[
720894,
720895
],
"disallowed"
],
[
[
720896,
786429
],
"disallowed"
],
[
[
786430,
786431
],
"disallowed"
],
[
[
786432,
851965
],
"disallowed"
],
[
[
851966,
851967
],
"disallowed"
],
[
[
851968,
917501
],
"disallowed"
],
[
[
917502,
917503
],
"disallowed"
],
[
[
917504,
917504
],
"disallowed"
],
[
[
917505,
917505
],
"disallowed"
],
[
[
917506,
917535
],
"disallowed"
],
[
[
917536,
917631
],
"disallowed"
],
[
[
917632,
917759
],
"disallowed"
],
[
[
917760,
917999
],
"ignored"
],
[
[
918000,
983037
],
"disallowed"
],
[
[
983038,
983039
],
"disallowed"
],
[
[
983040,
1048573
],
"disallowed"
],
[
[
1048574,
1048575
],
"disallowed"
],
[
[
1048576,
1114109
],
"disallowed"
],
[
[
1114110,
1114111
],
"disallowed"
]
];
var PROCESSING_OPTIONS = {
TRANSITIONAL: 0,
NONTRANSITIONAL: 1
};
function normalize(str) {
// fix bug in v8
return str.split('\u0000').map(function (s) {
return s.normalize('NFC');
}).join('\u0000');
}
function findStatus(val) {
var start = 0;
var end = mappingTable.length - 1;
while (start <= end) {
var mid = Math.floor((start + end) / 2);
var target = mappingTable[mid];
if (target[0][0] <= val && target[0][1] >= val) {
return target;
} else if (target[0][0] > val) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return null;
}
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
function countSymbols(string) {
return string
// replace every surrogate pair with a BMP symbol
.replace(regexAstralSymbols, '_')
// then get the length
.length;
}
function mapChars(domain_name, useSTD3, processing_option) {
var hasError = false;
var processed = "";
var len = countSymbols(domain_name);
for (var i = 0; i < len; ++i) {
var codePoint = domain_name.codePointAt(i);
var status = findStatus(codePoint);
switch (status[1]) {
case "disallowed":
hasError = true;
processed += String.fromCodePoint(codePoint);
break;
case "ignored":
break;
case "mapped":
processed += String.fromCodePoint.apply(String, status[2]);
break;
case "deviation":
if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {
processed += String.fromCodePoint.apply(String, status[2]);
} else {
processed += String.fromCodePoint(codePoint);
}
break;
case "valid":
processed += String.fromCodePoint(codePoint);
break;
case "disallowed_STD3_mapped":
if (useSTD3) {
hasError = true;
processed += String.fromCodePoint(codePoint);
} else {
processed += String.fromCodePoint.apply(String, status[2]);
}
break;
case "disallowed_STD3_valid":
if (useSTD3) {
hasError = true;
}
processed += String.fromCodePoint(codePoint);
break;
}
}
return {
string: processed,
error: hasError
};
}
var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/;
function validateLabel(label, processing_option) {
if (label.substr(0, 4) === "xn--") {
label = punycode.toUnicode(label);
}
var error = false;
if (normalize(label) !== label || label[3] === "-" && label[4] === "-" || label[0] === "-" || label[label.length - 1] === "-" || label.indexOf(".") !== -1 || label.search(combiningMarksRegex) === 0) {
error = true;
}
var len = countSymbols(label);
for (var i = 0; i < len; ++i) {
var status = findStatus(label.codePointAt(i));
if (processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid" || processing === PROCESSING_OPTIONS.NONTRANSITIONAL && status[1] !== "valid" && status[1] !== "deviation") {
error = true;
break;
}
}
return {
label: label,
error: error
};
}
function processing(domain_name, useSTD3, processing_option) {
var result = mapChars(domain_name, useSTD3, processing_option);
result.string = normalize(result.string);
var labels = result.string.split(".");
for (var i = 0; i < labels.length; ++i) {
try {
var validation = validateLabel(labels[i]);
labels[i] = validation.label;
result.error = result.error || validation.error;
} catch (e) {
result.error = true;
}
}
return {
string: labels.join("."),
error: result.error
};
}
var toASCII = function (domain_name, useSTD3, processing_option, verifyDnsLength) {
var result = processing(domain_name, useSTD3, processing_option);
var labels = result.string.split(".");
labels = labels.map(function (l) {
try {
return punycode.toASCII(l);
} catch (e) {
result.error = true;
return l;
}
});
if (verifyDnsLength) {
var total = labels.slice(0, labels.length - 1).join(".").length;
if (total.length > 253 || total.length === 0) {
result.error = true;
}
for (var i = 0; i < labels.length; ++i) {
if (labels.length > 63 || labels.length === 0) {
result.error = true;
break;
}
}
}
if (result.error) return null;
return labels.join(".");
};
var toUnicode = function (domain_name, useSTD3) {
var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);
return {
domain: result.string,
error: result.error
};
};
var PROCESSING_OPTIONS_1 = PROCESSING_OPTIONS;
var tr46 = {
toASCII: toASCII,
toUnicode: toUnicode,
PROCESSING_OPTIONS: PROCESSING_OPTIONS_1
};
var urlStateMachine = createCommonjsModule(function (module) {
const specialSchemes = {
ftp: 21,
file: null,
gopher: 70,
http: 80,
https: 443,
ws: 80,
wss: 443
};
const failure = Symbol("failure");
function countSymbols(str) {
return punycode.ucs2.decode(str).length;
}
function at(input, idx) {
const c = input[idx];
return isNaN(c) ? undefined : String.fromCodePoint(c);
}
function isASCIIDigit(c) {
return c >= 0x30 && c <= 0x39;
}
function isASCIIAlpha(c) {
return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A;
}
function isASCIIAlphanumeric(c) {
return isASCIIAlpha(c) || isASCIIDigit(c);
}
function isASCIIHex(c) {
return isASCIIDigit(c) || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66;
}
function isSingleDot(buffer) {
return buffer === "." || buffer.toLowerCase() === "%2e";
}
function isDoubleDot(buffer) {
buffer = buffer.toLowerCase();
return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
}
function isWindowsDriveLetterCodePoints(cp1, cp2) {
return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
}
function isWindowsDriveLetterString(string) {
return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
}
function isNormalizedWindowsDriveLetterString(string) {
return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
}
function containsForbiddenHostCodePoint(string) {
return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
}
function containsForbiddenHostCodePointExcludingPercent(string) {
return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
}
function isSpecialScheme(scheme) {
return specialSchemes[scheme] !== undefined;
}
function isSpecial(url) {
return isSpecialScheme(url.scheme);
}
function defaultPort(scheme) {
return specialSchemes[scheme];
}
function percentEncode(c) {
let hex = c.toString(16).toUpperCase();
if (hex.length === 1) {
hex = "0" + hex;
}
return "%" + hex;
}
function utf8PercentEncode(c) {
const buf = new Buffer(c);
let str = "";
for (let i = 0; i < buf.length; ++i) {
str += percentEncode(buf[i]);
}
return str;
}
function utf8PercentDecode(str) {
const input = new Buffer(str);
const output = [];
for (let i = 0; i < input.length; ++i) {
if (input[i] !== 37) {
output.push(input[i]);
} else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {
output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));
i += 2;
} else {
output.push(input[i]);
}
}
return new Buffer(output).toString();
}
function isC0ControlPercentEncode(c) {
return c <= 0x1F || c > 0x7E;
}
const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);
function isPathPercentEncode(c) {
return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);
}
const extraUserinfoPercentEncodeSet = new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
function isUserinfoPercentEncode(c) {
return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
}
function percentEncodeChar(c, encodeSetPredicate) {
const cStr = String.fromCodePoint(c);
if (encodeSetPredicate(c)) {
return utf8PercentEncode(cStr);
}
return cStr;
}
function parseIPv4Number(input) {
let R = 10;
if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
input = input.substring(2);
R = 16;
} else if (input.length >= 2 && input.charAt(0) === "0") {
input = input.substring(1);
R = 8;
}
if (input === "") {
return 0;
}
const regex = R === 10 ? /[^0-9]/ : R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/;
if (regex.test(input)) {
return failure;
}
return parseInt(input, R);
}
function parseIPv4(input) {
const parts = input.split(".");
if (parts[parts.length - 1] === "") {
if (parts.length > 1) {
parts.pop();
}
}
if (parts.length > 4) {
return input;
}
const numbers = [];
for (const part of parts) {
if (part === "") {
return input;
}
const n = parseIPv4Number(part);
if (n === failure) {
return input;
}
numbers.push(n);
}
for (let i = 0; i < numbers.length - 1; ++i) {
if (numbers[i] > 255) {
return failure;
}
}
if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
return failure;
}
let ipv4 = numbers.pop();
let counter = 0;
for (const n of numbers) {
ipv4 += n * Math.pow(256, 3 - counter);
++counter;
}
return ipv4;
}
function serializeIPv4(address) {
let output = "";
let n = address;
for (let i = 1; i <= 4; ++i) {
output = String(n % 256) + output;
if (i !== 4) {
output = "." + output;
}
n = Math.floor(n / 256);
}
return output;
}
function parseIPv6(input) {
const address = [0, 0, 0, 0, 0, 0, 0, 0];
let pieceIndex = 0;
let compress = null;
let pointer = 0;
input = punycode.ucs2.decode(input);
if (input[pointer] === 58) {
if (input[pointer + 1] !== 58) {
return failure;
}
pointer += 2;
++pieceIndex;
compress = pieceIndex;
}
while (pointer < input.length) {
if (pieceIndex === 8) {
return failure;
}
if (input[pointer] === 58) {
if (compress !== null) {
return failure;
}
++pointer;
++pieceIndex;
compress = pieceIndex;
continue;
}
let value = 0;
let length = 0;
while (length < 4 && isASCIIHex(input[pointer])) {
value = value * 0x10 + parseInt(at(input, pointer), 16);
++pointer;
++length;
}
if (input[pointer] === 46) {
if (length === 0) {
return failure;
}
pointer -= length;
if (pieceIndex > 6) {
return failure;
}
let numbersSeen = 0;
while (input[pointer] !== undefined) {
let ipv4Piece = null;
if (numbersSeen > 0) {
if (input[pointer] === 46 && numbersSeen < 4) {
++pointer;
} else {
return failure;
}
}
if (!isASCIIDigit(input[pointer])) {
return failure;
}
while (isASCIIDigit(input[pointer])) {
const number = parseInt(at(input, pointer));
if (ipv4Piece === null) {
ipv4Piece = number;
} else if (ipv4Piece === 0) {
return failure;
} else {
ipv4Piece = ipv4Piece * 10 + number;
}
if (ipv4Piece > 255) {
return failure;
}
++pointer;
}
address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
++numbersSeen;
if (numbersSeen === 2 || numbersSeen === 4) {
++pieceIndex;
}
}
if (numbersSeen !== 4) {
return failure;
}
break;
} else if (input[pointer] === 58) {
++pointer;
if (input[pointer] === undefined) {
return failure;
}
} else if (input[pointer] !== undefined) {
return failure;
}
address[pieceIndex] = value;
++pieceIndex;
}
if (compress !== null) {
let swaps = pieceIndex - compress;
pieceIndex = 7;
while (pieceIndex !== 0 && swaps > 0) {
const temp = address[compress + swaps - 1];
address[compress + swaps - 1] = address[pieceIndex];
address[pieceIndex] = temp;
--pieceIndex;
--swaps;
}
} else if (compress === null && pieceIndex !== 8) {
return failure;
}
return address;
}
function serializeIPv6(address) {
let output = "";
const seqResult = findLongestZeroSequence(address);
const compress = seqResult.idx;
let ignore0 = false;
for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
if (ignore0 && address[pieceIndex] === 0) {
continue;
} else if (ignore0) {
ignore0 = false;
}
if (compress === pieceIndex) {
const separator = pieceIndex === 0 ? "::" : ":";
output += separator;
ignore0 = true;
continue;
}
output += address[pieceIndex].toString(16);
if (pieceIndex !== 7) {
output += ":";
}
}
return output;
}
function parseHost(input, isSpecialArg) {
if (input[0] === "[") {
if (input[input.length - 1] !== "]") {
return failure;
}
return parseIPv6(input.substring(1, input.length - 1));
}
if (!isSpecialArg) {
return parseOpaqueHost(input);
}
const domain = utf8PercentDecode(input);
const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);
if (asciiDomain === null) {
return failure;
}
if (containsForbiddenHostCodePoint(asciiDomain)) {
return failure;
}
const ipv4Host = parseIPv4(asciiDomain);
if (typeof ipv4Host === "number" || ipv4Host === failure) {
return ipv4Host;
}
return asciiDomain;
}
function parseOpaqueHost(input) {
if (containsForbiddenHostCodePointExcludingPercent(input)) {
return failure;
}
let output = "";
const decoded = punycode.ucs2.decode(input);
for (let i = 0; i < decoded.length; ++i) {
output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
}
return output;
}
function findLongestZeroSequence(arr) {
let maxIdx = null;
let maxLen = 1; // only find elements > 1
let currStart = null;
let currLen = 0;
for (let i = 0; i < arr.length; ++i) {
if (arr[i] !== 0) {
if (currLen > maxLen) {
maxIdx = currStart;
maxLen = currLen;
}
currStart = null;
currLen = 0;
} else {
if (currStart === null) {
currStart = i;
}
++currLen;
}
}
// if trailing zeros
if (currLen > maxLen) {
maxIdx = currStart;
maxLen = currLen;
}
return {
idx: maxIdx,
len: maxLen
};
}
function serializeHost(host) {
if (typeof host === "number") {
return serializeIPv4(host);
}
// IPv6 serializer
if (host instanceof Array) {
return "[" + serializeIPv6(host) + "]";
}
return host;
}
function trimControlChars(url) {
return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
}
function trimTabAndNewline(url) {
return url.replace(/\u0009|\u000A|\u000D/g, "");
}
function shortenPath(url) {
const path = url.path;
if (path.length === 0) {
return;
}
if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
return;
}
path.pop();
}
function includesCredentials(url) {
return url.username !== "" || url.password !== "";
}
function cannotHaveAUsernamePasswordPort(url) {
return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
}
function isNormalizedWindowsDriveLetter(string) {
return /^[A-Za-z]:$/.test(string);
}
function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
this.pointer = 0;
this.input = input;
this.base = base || null;
this.encodingOverride = encodingOverride || "utf-8";
this.stateOverride = stateOverride;
this.url = url;
this.failure = false;
this.parseError = false;
if (!this.url) {
this.url = {
scheme: "",
username: "",
password: "",
host: null,
port: null,
path: [],
query: null,
fragment: null,
cannotBeABaseURL: false
};
const res = trimControlChars(this.input);
if (res !== this.input) {
this.parseError = true;
}
this.input = res;
}
const res = trimTabAndNewline(this.input);
if (res !== this.input) {
this.parseError = true;
}
this.input = res;
this.state = stateOverride || "scheme start";
this.buffer = "";
this.atFlag = false;
this.arrFlag = false;
this.passwordTokenSeenFlag = false;
this.input = punycode.ucs2.decode(this.input);
for (; this.pointer <= this.input.length; ++this.pointer) {
const c = this.input[this.pointer];
const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
// exec state machine
const ret = this["parse " + this.state](c, cStr);
if (!ret) {
break; // terminate algorithm
} else if (ret === failure) {
this.failure = true;
break;
}
}
}
URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
if (isASCIIAlpha(c)) {
this.buffer += cStr.toLowerCase();
this.state = "scheme";
} else if (!this.stateOverride) {
this.state = "no scheme";
--this.pointer;
} else {
this.parseError = true;
return failure;
}
return true;
};
URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
this.buffer += cStr.toLowerCase();
} else if (c === 58) {
if (this.stateOverride) {
if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
return false;
}
if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
return false;
}
if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
return false;
}
if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
return false;
}
}
this.url.scheme = this.buffer;
this.buffer = "";
if (this.stateOverride) {
return false;
}
if (this.url.scheme === "file") {
if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
this.parseError = true;
}
this.state = "file";
} else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
this.state = "special relative or authority";
} else if (isSpecial(this.url)) {
this.state = "special authority slashes";
} else if (this.input[this.pointer + 1] === 47) {
this.state = "path or authority";
++this.pointer;
} else {
this.url.cannotBeABaseURL = true;
this.url.path.push("");
this.state = "cannot-be-a-base-URL path";
}
} else if (!this.stateOverride) {
this.buffer = "";
this.state = "no scheme";
this.pointer = -1;
} else {
this.parseError = true;
return failure;
}
return true;
};
URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
if (this.base === null || this.base.cannotBeABaseURL && c !== 35) {
return failure;
} else if (this.base.cannotBeABaseURL && c === 35) {
this.url.scheme = this.base.scheme;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.url.cannotBeABaseURL = true;
this.state = "fragment";
} else if (this.base.scheme === "file") {
this.state = "file";
--this.pointer;
} else {
this.state = "relative";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
if (c === 47 && this.input[this.pointer + 1] === 47) {
this.state = "special authority ignore slashes";
++this.pointer;
} else {
this.parseError = true;
this.state = "relative";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
if (c === 47) {
this.state = "authority";
} else {
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
this.url.scheme = this.base.scheme;
if (isNaN(c)) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
} else if (c === 47) {
this.state = "relative slash";
} else if (c === 63) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.state = "fragment";
} else if (isSpecial(this.url) && c === 92) {
this.parseError = true;
this.state = "relative slash";
} else {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice(0, this.base.path.length - 1);
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
if (isSpecial(this.url) && (c === 47 || c === 92)) {
if (c === 92) {
this.parseError = true;
}
this.state = "special authority ignore slashes";
} else if (c === 47) {
this.state = "authority";
} else {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
if (c === 47 && this.input[this.pointer + 1] === 47) {
this.state = "special authority ignore slashes";
++this.pointer;
} else {
this.parseError = true;
this.state = "special authority ignore slashes";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
if (c !== 47 && c !== 92) {
this.state = "authority";
--this.pointer;
} else {
this.parseError = true;
}
return true;
};
URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
if (c === 64) {
this.parseError = true;
if (this.atFlag) {
this.buffer = "%40" + this.buffer;
}
this.atFlag = true;
// careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
const len = countSymbols(this.buffer);
for (let pointer = 0; pointer < len; ++pointer) {
const codePoint = this.buffer.codePointAt(pointer);
if (codePoint === 58 && !this.passwordTokenSeenFlag) {
this.passwordTokenSeenFlag = true;
continue;
}
const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
if (this.passwordTokenSeenFlag) {
this.url.password += encodedCodePoints;
} else {
this.url.username += encodedCodePoints;
}
}
this.buffer = "";
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 || isSpecial(this.url) && c === 92) {
if (this.atFlag && this.buffer === "") {
this.parseError = true;
return failure;
}
this.pointer -= countSymbols(this.buffer) + 1;
this.buffer = "";
this.state = "host";
} else {
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse hostname"] = URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
if (this.stateOverride && this.url.scheme === "file") {
--this.pointer;
this.state = "file host";
} else if (c === 58 && !this.arrFlag) {
if (this.buffer === "") {
this.parseError = true;
return failure;
}
const host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
this.url.host = host;
this.buffer = "";
this.state = "port";
if (this.stateOverride === "hostname") {
return false;
}
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 || isSpecial(this.url) && c === 92) {
--this.pointer;
if (isSpecial(this.url) && this.buffer === "") {
this.parseError = true;
return failure;
} else if (this.stateOverride && this.buffer === "" && (includesCredentials(this.url) || this.url.port !== null)) {
this.parseError = true;
return false;
}
const host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
this.url.host = host;
this.buffer = "";
this.state = "path start";
if (this.stateOverride) {
return false;
}
} else {
if (c === 91) {
this.arrFlag = true;
} else if (c === 93) {
this.arrFlag = false;
}
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
if (isASCIIDigit(c)) {
this.buffer += cStr;
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 || isSpecial(this.url) && c === 92 || this.stateOverride) {
if (this.buffer !== "") {
const port = parseInt(this.buffer);
if (port > Math.pow(2, 16) - 1) {
this.parseError = true;
return failure;
}
this.url.port = port === defaultPort(this.url.scheme) ? null : port;
this.buffer = "";
}
if (this.stateOverride) {
return false;
}
this.state = "path start";
--this.pointer;
} else {
this.parseError = true;
return failure;
}
return true;
};
const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
URLStateMachine.prototype["parse file"] = function parseFile(c) {
this.url.scheme = "file";
if (c === 47 || c === 92) {
if (c === 92) {
this.parseError = true;
}
this.state = "file slash";
} else if (this.base !== null && this.base.scheme === "file") {
if (isNaN(c)) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
} else if (c === 63) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.state = "fragment";
} else {
if (this.input.length - this.pointer - 1 === 0 ||
// remaining consists of 0 code points
!isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || this.input.length - this.pointer - 1 >= 2 &&
// remaining has at least 2 code points
!fileOtherwiseCodePoints.has(this.input[this.pointer + 2])) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
shortenPath(this.url);
} else {
this.parseError = true;
}
this.state = "path";
--this.pointer;
}
} else {
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
if (c === 47 || c === 92) {
if (c === 92) {
this.parseError = true;
}
this.state = "file host";
} else {
if (this.base !== null && this.base.scheme === "file") {
if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
this.url.path.push(this.base.path[0]);
} else {
this.url.host = this.base.host;
}
}
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
--this.pointer;
if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
this.parseError = true;
this.state = "path";
} else if (this.buffer === "") {
this.url.host = "";
if (this.stateOverride) {
return false;
}
this.state = "path start";
} else {
let host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
if (host === "localhost") {
host = "";
}
this.url.host = host;
if (this.stateOverride) {
return false;
}
this.buffer = "";
this.state = "path start";
}
} else {
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
if (isSpecial(this.url)) {
if (c === 92) {
this.parseError = true;
}
this.state = "path";
if (c !== 47 && c !== 92) {
--this.pointer;
}
} else if (!this.stateOverride && c === 63) {
this.url.query = "";
this.state = "query";
} else if (!this.stateOverride && c === 35) {
this.url.fragment = "";
this.state = "fragment";
} else if (c !== undefined) {
this.state = "path";
if (c !== 47) {
--this.pointer;
}
}
return true;
};
URLStateMachine.prototype["parse path"] = function parsePath(c) {
if (isNaN(c) || c === 47 || isSpecial(this.url) && c === 92 || !this.stateOverride && (c === 63 || c === 35)) {
if (isSpecial(this.url) && c === 92) {
this.parseError = true;
}
if (isDoubleDot(this.buffer)) {
shortenPath(this.url);
if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
this.url.path.push("");
}
} else if (isSingleDot(this.buffer) && c !== 47 && !(isSpecial(this.url) && c === 92)) {
this.url.path.push("");
} else if (!isSingleDot(this.buffer)) {
if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
if (this.url.host !== "" && this.url.host !== null) {
this.parseError = true;
this.url.host = "";
}
this.buffer = this.buffer[0] + ":";
}
this.url.path.push(this.buffer);
}
this.buffer = "";
if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
while (this.url.path.length > 1 && this.url.path[0] === "") {
this.parseError = true;
this.url.path.shift();
}
}
if (c === 63) {
this.url.query = "";
this.state = "query";
}
if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
}
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.buffer += percentEncodeChar(c, isPathPercentEncode);
}
return true;
};
URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
if (c === 63) {
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
} else {
// TODO: Add: not a URL code point
if (!isNaN(c) && c !== 37) {
this.parseError = true;
}
if (c === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
if (!isNaN(c)) {
this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
}
}
return true;
};
URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
if (isNaN(c) || !this.stateOverride && c === 35) {
if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
this.encodingOverride = "utf-8";
}
const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead
for (let i = 0; i < buffer.length; ++i) {
if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || buffer[i] === 0x3C || buffer[i] === 0x3E) {
this.url.query += percentEncode(buffer[i]);
} else {
this.url.query += String.fromCodePoint(buffer[i]);
}
}
this.buffer = "";
if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
}
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
if (isNaN(c)) ; else if (c === 0x0) {
this.parseError = true;
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);
}
return true;
};
function serializeURL(url, excludeFragment) {
let output = url.scheme + ":";
if (url.host !== null) {
output += "//";
if (url.username !== "" || url.password !== "") {
output += url.username;
if (url.password !== "") {
output += ":" + url.password;
}
output += "@";
}
output += serializeHost(url.host);
if (url.port !== null) {
output += ":" + url.port;
}
} else if (url.host === null && url.scheme === "file") {
output += "//";
}
if (url.cannotBeABaseURL) {
output += url.path[0];
} else {
for (const string of url.path) {
output += "/" + string;
}
}
if (url.query !== null) {
output += "?" + url.query;
}
if (!excludeFragment && url.fragment !== null) {
output += "#" + url.fragment;
}
return output;
}
function serializeOrigin(tuple) {
let result = tuple.scheme + "://";
result += serializeHost(tuple.host);
if (tuple.port !== null) {
result += ":" + tuple.port;
}
return result;
}
module.exports.serializeURL = serializeURL;
module.exports.serializeURLOrigin = function (url) {
// https://url.spec.whatwg.org/#concept-url-origin
switch (url.scheme) {
case "blob":
try {
return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
} catch (e) {
// serializing an opaque origin returns "null"
return "null";
}
case "ftp":
case "gopher":
case "http":
case "https":
case "ws":
case "wss":
return serializeOrigin({
scheme: url.scheme,
host: url.host,
port: url.port
});
case "file":
// spec says "exercise to the reader", chrome says "file://"
return "file://";
default:
// serializing an opaque origin returns "null"
return "null";
}
};
module.exports.basicURLParse = function (input, options) {
if (options === undefined) {
options = {};
}
const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
if (usm.failure) {
return "failure";
}
return usm.url;
};
module.exports.setTheUsername = function (url, username) {
url.username = "";
const decoded = punycode.ucs2.decode(username);
for (let i = 0; i < decoded.length; ++i) {
url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
}
};
module.exports.setThePassword = function (url, password) {
url.password = "";
const decoded = punycode.ucs2.decode(password);
for (let i = 0; i < decoded.length; ++i) {
url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
}
};
module.exports.serializeHost = serializeHost;
module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
module.exports.serializeInteger = function (integer) {
return String(integer);
};
module.exports.parseURL = function (input, options) {
if (options === undefined) {
options = {};
}
// We don't handle blobs, so this just delegates:
return module.exports.basicURLParse(input, {
baseURL: options.baseURL,
encodingOverride: options.encodingOverride
});
};
});
var implementation = class URLImpl {
constructor(constructorArgs) {
const url = constructorArgs[0];
const base = constructorArgs[1];
let parsedBase = null;
if (base !== undefined) {
parsedBase = urlStateMachine.basicURLParse(base);
if (parsedBase === "failure") {
throw new TypeError("Invalid base URL");
}
}
const parsedURL = urlStateMachine.basicURLParse(url, {
baseURL: parsedBase
});
if (parsedURL === "failure") {
throw new TypeError("Invalid URL");
}
this._url = parsedURL;
// TODO: query stuff
}
get href() {
return urlStateMachine.serializeURL(this._url);
}
set href(v) {
const parsedURL = urlStateMachine.basicURLParse(v);
if (parsedURL === "failure") {
throw new TypeError("Invalid URL");
}
this._url = parsedURL;
}
get origin() {
return urlStateMachine.serializeURLOrigin(this._url);
}
get protocol() {
return this._url.scheme + ":";
}
set protocol(v) {
urlStateMachine.basicURLParse(v + ":", {
url: this._url,
stateOverride: "scheme start"
});
}
get username() {
return this._url.username;
}
set username(v) {
if (urlStateMachine.cannotHaveAUsernamePasswordPort(this._url)) {
return;
}
urlStateMachine.setTheUsername(this._url, v);
}
get password() {
return this._url.password;
}
set password(v) {
if (urlStateMachine.cannotHaveAUsernamePasswordPort(this._url)) {
return;
}
urlStateMachine.setThePassword(this._url, v);
}
get host() {
const url = this._url;
if (url.host === null) {
return "";
}
if (url.port === null) {
return urlStateMachine.serializeHost(url.host);
}
return urlStateMachine.serializeHost(url.host) + ":" + urlStateMachine.serializeInteger(url.port);
}
set host(v) {
if (this._url.cannotBeABaseURL) {
return;
}
urlStateMachine.basicURLParse(v, {
url: this._url,
stateOverride: "host"
});
}
get hostname() {
if (this._url.host === null) {
return "";
}
return urlStateMachine.serializeHost(this._url.host);
}
set hostname(v) {
if (this._url.cannotBeABaseURL) {
return;
}
urlStateMachine.basicURLParse(v, {
url: this._url,
stateOverride: "hostname"
});
}
get port() {
if (this._url.port === null) {
return "";
}
return urlStateMachine.serializeInteger(this._url.port);
}
set port(v) {
if (urlStateMachine.cannotHaveAUsernamePasswordPort(this._url)) {
return;
}
if (v === "") {
this._url.port = null;
} else {
urlStateMachine.basicURLParse(v, {
url: this._url,
stateOverride: "port"
});
}
}
get pathname() {
if (this._url.cannotBeABaseURL) {
return this._url.path[0];
}
if (this._url.path.length === 0) {
return "";
}
return "/" + this._url.path.join("/");
}
set pathname(v) {
if (this._url.cannotBeABaseURL) {
return;
}
this._url.path = [];
urlStateMachine.basicURLParse(v, {
url: this._url,
stateOverride: "path start"
});
}
get search() {
if (this._url.query === null || this._url.query === "") {
return "";
}
return "?" + this._url.query;
}
set search(v) {
// TODO: query stuff
const url = this._url;
if (v === "") {
url.query = null;
return;
}
const input = v[0] === "?" ? v.substring(1) : v;
url.query = "";
urlStateMachine.basicURLParse(input, {
url,
stateOverride: "query"
});
}
get hash() {
if (this._url.fragment === null || this._url.fragment === "") {
return "";
}
return "#" + this._url.fragment;
}
set hash(v) {
if (v === "") {
this._url.fragment = null;
return;
}
const input = v[0] === "#" ? v.substring(1) : v;
this._url.fragment = "";
urlStateMachine.basicURLParse(input, {
url: this._url,
stateOverride: "fragment"
});
}
toJSON() {
return this.href;
}
};
var URLImpl_1 = {
implementation: implementation
};
var URL_1 = createCommonjsModule(function (module) {
const impl = utils.implSymbol;
function URL(url) {
if (!this || this[impl] || !(this instanceof URL)) {
throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
}
if (arguments.length < 1) {
throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
}
const args = [];
for (let i = 0; i < arguments.length && i < 2; ++i) {
args[i] = arguments[i];
}
args[0] = lib$2["USVString"](args[0]);
if (args[1] !== undefined) {
args[1] = lib$2["USVString"](args[1]);
}
module.exports.setup(this, args);
}
URL.prototype.toJSON = function toJSON() {
if (!this || !module.exports.is(this)) {
throw new TypeError("Illegal invocation");
}
const args = [];
for (let i = 0; i < arguments.length && i < 0; ++i) {
args[i] = arguments[i];
}
return this[impl].toJSON.apply(this[impl], args);
};
Object.defineProperty(URL.prototype, "href", {
get() {
return this[impl].href;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].href = V;
},
enumerable: true,
configurable: true
});
URL.prototype.toString = function () {
if (!this || !module.exports.is(this)) {
throw new TypeError("Illegal invocation");
}
return this.href;
};
Object.defineProperty(URL.prototype, "origin", {
get() {
return this[impl].origin;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "protocol", {
get() {
return this[impl].protocol;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].protocol = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "username", {
get() {
return this[impl].username;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].username = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "password", {
get() {
return this[impl].password;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].password = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "host", {
get() {
return this[impl].host;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].host = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "hostname", {
get() {
return this[impl].hostname;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].hostname = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "port", {
get() {
return this[impl].port;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].port = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "pathname", {
get() {
return this[impl].pathname;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].pathname = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "search", {
get() {
return this[impl].search;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].search = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "hash", {
get() {
return this[impl].hash;
},
set(V) {
V = lib$2["USVString"](V);
this[impl].hash = V;
},
enumerable: true,
configurable: true
});
module.exports = {
is(obj) {
return !!obj && obj[impl] instanceof URLImpl_1.implementation;
},
create(constructorArgs, privateData) {
let obj = Object.create(URL.prototype);
this.setup(obj, constructorArgs, privateData);
return obj;
},
setup(obj, constructorArgs, privateData) {
if (!privateData) privateData = {};
privateData.wrapper = obj;
obj[impl] = new URLImpl_1.implementation(constructorArgs, privateData);
obj[impl][utils.wrapperSymbol] = obj;
},
interface: URL,
expose: {
Window: {
URL: URL
},
Worker: {
URL: URL
}
}
};
});
var URL$4 = URL_1.interface;
var serializeURL = urlStateMachine.serializeURL;
var serializeURLOrigin = urlStateMachine.serializeURLOrigin;
var basicURLParse = urlStateMachine.basicURLParse;
var setTheUsername = urlStateMachine.setTheUsername;
var setThePassword = urlStateMachine.setThePassword;
var serializeHost = urlStateMachine.serializeHost;
var serializeInteger = urlStateMachine.serializeInteger;
var parseURL$2 = urlStateMachine.parseURL;
var publicApi = {
URL: URL$4,
serializeURL: serializeURL,
serializeURLOrigin: serializeURLOrigin,
basicURLParse: basicURLParse,
setTheUsername: setTheUsername,
setThePassword: setThePassword,
serializeHost: serializeHost,
serializeInteger: serializeInteger,
parseURL: parseURL$2
};
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
// fix for "Readable" isn't a named export issue
const Readable$1 = Stream.Readable;
const BUFFER$1 = Symbol('buffer');
const TYPE$2 = Symbol('type');
class Blob$1 {
constructor() {
this[TYPE$2] = '';
const blobParts = arguments[0];
const options = arguments[1];
const buffers = [];
if (blobParts) {
const a = blobParts;
const length = Number(a.length);
for (let i = 0; i < length; i++) {
const element = a[i];
let buffer;
if (element instanceof Buffer) {
buffer = element;
} else if (ArrayBuffer.isView(element)) {
buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
} else if (element instanceof ArrayBuffer) {
buffer = Buffer.from(element);
} else if (element instanceof Blob$1) {
buffer = element[BUFFER$1];
} else {
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
}
buffers.push(buffer);
}
}
this[BUFFER$1] = Buffer.concat(buffers);
let type = options && options.type !== undefined && String(options.type).toLowerCase();
if (type && !/[^\u0020-\u007E]/.test(type)) {
this[TYPE$2] = type;
}
}
get size() {
return this[BUFFER$1].length;
}
get type() {
return this[TYPE$2];
}
text() {
return Promise.resolve(this[BUFFER$1].toString());
}
arrayBuffer() {
const buf = this[BUFFER$1];
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
return Promise.resolve(ab);
}
stream() {
const readable = new Readable$1();
readable._read = function () {};
readable.push(this[BUFFER$1]);
readable.push(null);
return readable;
}
toString() {
return '[object Blob]';
}
slice() {
const size = this.size;
const start = arguments[0];
const end = arguments[1];
let relativeStart, relativeEnd;
if (start === undefined) {
relativeStart = 0;
} else if (start < 0) {
relativeStart = Math.max(size + start, 0);
} else {
relativeStart = Math.min(start, size);
}
if (end === undefined) {
relativeEnd = size;
} else if (end < 0) {
relativeEnd = Math.max(size + end, 0);
} else {
relativeEnd = Math.min(end, size);
}
const span = Math.max(relativeEnd - relativeStart, 0);
const buffer = this[BUFFER$1];
const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
const blob = new Blob$1([], {
type: arguments[2]
});
blob[BUFFER$1] = slicedBuffer;
return blob;
}
}
Object.defineProperties(Blob$1.prototype, {
size: {
enumerable: true
},
type: {
enumerable: true
},
slice: {
enumerable: true
}
});
Object.defineProperty(Blob$1.prototype, Symbol.toStringTag, {
value: 'Blob',
writable: false,
enumerable: false,
configurable: true
});
/**
* fetch-error.js
*
* FetchError interface for operational errors
*/
/**
* Create FetchError instance
*
* @param String message Error message for human
* @param String type Error type for machine
* @param String systemError For Node.js system error
* @return FetchError
*/
function FetchError$1(message, type, systemError) {
Error.call(this, message);
this.message = message;
this.type = type;
// when err.type is `system`, err.code contains system error code
if (systemError) {
this.code = this.errno = systemError.code;
}
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
FetchError$1.prototype = Object.create(Error.prototype);
FetchError$1.prototype.constructor = FetchError$1;
FetchError$1.prototype.name = 'FetchError';
let convert$1;
try {
convert$1 = require('encoding').convert;
} catch (e) {}
const INTERNALS$3 = Symbol('Body internals');
// fix an issue where "PassThrough" isn't a named export for node <10
const PassThrough$2 = Stream.PassThrough;
/**
* Body mixin
*
* Ref: https://fetch.spec.whatwg.org/#body
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
function Body$2(body) {
var _this = this;
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$size = _ref.size;
let size = _ref$size === undefined ? 0 : _ref$size;
var _ref$timeout = _ref.timeout;
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
if (body == null) {
// body is undefined or null
body = null;
} else if (isURLSearchParams$1(body)) {
// body is a URLSearchParams
body = Buffer.from(body.toString());
} else if (isBlob$1(body)) ;else if (Buffer.isBuffer(body)) ;else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
// body is ArrayBuffer
body = Buffer.from(body);
} else if (ArrayBuffer.isView(body)) {
// body is ArrayBufferView
body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
} else if (body instanceof Stream) ;else {
// none of the above
// coerce to string then buffer
body = Buffer.from(String(body));
}
this[INTERNALS$3] = {
body,
disturbed: false,
error: null
};
this.size = size;
this.timeout = timeout;
if (body instanceof Stream) {
body.on('error', function (err) {
const error = err.name === 'AbortError' ? err : new FetchError$1(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
_this[INTERNALS$3].error = error;
});
}
}
Body$2.prototype = {
get body() {
return this[INTERNALS$3].body;
},
get bodyUsed() {
return this[INTERNALS$3].disturbed;
},
/**
* Decode response as ArrayBuffer
*
* @return Promise
*/
arrayBuffer() {
return consumeBody$2.call(this).then(function (buf) {
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
});
},
/**
* Return raw response as Blob
*
* @return Promise
*/
blob() {
let ct = this.headers && this.headers.get('content-type') || '';
return consumeBody$2.call(this).then(function (buf) {
return Object.assign(
// Prevent copying
new Blob$1([], {
type: ct.toLowerCase()
}), {
[BUFFER$1]: buf
});
});
},
/**
* Decode response as json
*
* @return Promise
*/
json() {
var _this2 = this;
return consumeBody$2.call(this).then(function (buffer) {
try {
return JSON.parse(buffer.toString());
} catch (err) {
return Body$2.Promise.reject(new FetchError$1(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
}
});
},
/**
* Decode response as text
*
* @return Promise
*/
text() {
return consumeBody$2.call(this).then(function (buffer) {
return buffer.toString();
});
},
/**
* Decode response as buffer (non-spec api)
*
* @return Promise
*/
buffer() {
return consumeBody$2.call(this);
},
/**
* Decode response as text, while automatically detecting the encoding and
* trying to decode to UTF-8 (non-spec api)
*
* @return Promise
*/
textConverted() {
var _this3 = this;
return consumeBody$2.call(this).then(function (buffer) {
return convertBody$1(buffer, _this3.headers);
});
}
};
// In browsers, all properties are enumerable.
Object.defineProperties(Body$2.prototype, {
body: {
enumerable: true
},
bodyUsed: {
enumerable: true
},
arrayBuffer: {
enumerable: true
},
blob: {
enumerable: true
},
json: {
enumerable: true
},
text: {
enumerable: true
}
});
Body$2.mixIn = function (proto) {
for (const name of Object.getOwnPropertyNames(Body$2.prototype)) {
// istanbul ignore else: future proof
if (!(name in proto)) {
const desc = Object.getOwnPropertyDescriptor(Body$2.prototype, name);
Object.defineProperty(proto, name, desc);
}
}
};
/**
* Consume and convert an entire Body to a Buffer.
*
* Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
*
* @return Promise
*/
function consumeBody$2() {
var _this4 = this;
if (this[INTERNALS$3].disturbed) {
return Body$2.Promise.reject(new TypeError(`body used already for: ${this.url}`));
}
this[INTERNALS$3].disturbed = true;
if (this[INTERNALS$3].error) {
return Body$2.Promise.reject(this[INTERNALS$3].error);
}
let body = this.body;
// body is null
if (body === null) {
return Body$2.Promise.resolve(Buffer.alloc(0));
}
// body is blob
if (isBlob$1(body)) {
body = body.stream();
}
// body is buffer
if (Buffer.isBuffer(body)) {
return Body$2.Promise.resolve(body);
}
// istanbul ignore if: should never happen
if (!(body instanceof Stream)) {
return Body$2.Promise.resolve(Buffer.alloc(0));
}
// body is stream
// get ready to actually consume the body
let accum = [];
let accumBytes = 0;
let abort = false;
return new Body$2.Promise(function (resolve, reject) {
let resTimeout;
// allow timeout on slow response body
if (_this4.timeout) {
resTimeout = setTimeout(function () {
abort = true;
reject(new FetchError$1(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
}, _this4.timeout);
}
// handle stream errors
body.on('error', function (err) {
if (err.name === 'AbortError') {
// if the request was aborted, reject with this Error
abort = true;
reject(err);
} else {
// other errors, such as incorrect content-encoding
reject(new FetchError$1(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
}
});
body.on('data', function (chunk) {
if (abort || chunk === null) {
return;
}
if (_this4.size && accumBytes + chunk.length > _this4.size) {
abort = true;
reject(new FetchError$1(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
return;
}
accumBytes += chunk.length;
accum.push(chunk);
});
body.on('end', function () {
if (abort) {
return;
}
clearTimeout(resTimeout);
try {
resolve(Buffer.concat(accum, accumBytes));
} catch (err) {
// handle streams that have accumulated too much data (issue #414)
reject(new FetchError$1(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
}
});
});
}
/**
* Detect buffer encoding and convert to target encoding
* ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
*
* @param Buffer buffer Incoming buffer
* @param String encoding Target encoding
* @return String
*/
function convertBody$1(buffer, headers) {
if (typeof convert$1 !== 'function') {
throw new Error('The package `encoding` must be installed to use the textConverted() function');
}
const ct = headers.get('content-type');
let charset = 'utf-8';
let res, str;
// header
if (ct) {
res = /charset=([^;]*)/i.exec(ct);
}
// no charset in content type, peek at response body for at most 1024 bytes
str = buffer.slice(0, 1024).toString();
// html5
if (!res && str) {
res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;
this[MAP$1] = Object.create(null);
if (init instanceof Headers$1) {
const rawHeaders = init.raw();
const headerNames = Object.keys(rawHeaders);
for (const headerName of headerNames) {
for (const value of rawHeaders[headerName]) {
this.append(headerName, value);
}
}
return;
}
// We don't worry about converting prop to ByteString here as append()
// will handle it.
if (init == null) ;else if (typeof init === 'object') {
const method = init[Symbol.iterator];
if (method != null) {
if (typeof method !== 'function') {
throw new TypeError('Header pairs must be iterable');
}
// sequence>
// Note: per spec we have to first exhaust the lists then process them
const pairs = [];
for (const pair of init) {
if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
throw new TypeError('Each header pair must be iterable');
}
pairs.push(Array.from(pair));
}
for (const pair of pairs) {
if (pair.length !== 2) {
throw new TypeError('Each header pair must be a name/value tuple');
}
this.append(pair[0], pair[1]);
}
} else {
// record
for (const key of Object.keys(init)) {
const value = init[key];
this.append(key, value);
}
}
} else {
throw new TypeError('Provided initializer must be an object');
}
}
/**
* Return combined header value given name
*
* @param String name Header name
* @return Mixed
*/
get(name) {
name = `${name}`;
validateName$1(name);
const key = find$1(this[MAP$1], name);
if (key === undefined) {
return null;
}
return this[MAP$1][key].join(', ');
}
/**
* Iterate over all headers
*
* @param Function callback Executed for each item with parameters (value, name, thisArg)
* @param Boolean thisArg `this` context for callback function
* @return Void
*/
forEach(callback) {
let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
let pairs = getHeaders$1(this);
let i = 0;
while (i < pairs.length) {
var _pairs$i = pairs[i];
const name = _pairs$i[0],
value = _pairs$i[1];
callback.call(thisArg, value, name, this);
pairs = getHeaders$1(this);
i++;
}
}
/**
* Overwrite header values given name
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
set(name, value) {
name = `${name}`;
value = `${value}`;
validateName$1(name);
validateValue$1(value);
const key = find$1(this[MAP$1], name);
this[MAP$1][key !== undefined ? key : name] = [value];
}
/**
* Append a value onto existing header
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
append(name, value) {
name = `${name}`;
value = `${value}`;
validateName$1(name);
validateValue$1(value);
const key = find$1(this[MAP$1], name);
if (key !== undefined) {
this[MAP$1][key].push(value);
} else {
this[MAP$1][name] = [value];
}
}
/**
* Check for header name existence
*
* @param String name Header name
* @return Boolean
*/
has(name) {
name = `${name}`;
validateName$1(name);
return find$1(this[MAP$1], name) !== undefined;
}
/**
* Delete all header values given name
*
* @param String name Header name
* @return Void
*/
delete(name) {
name = `${name}`;
validateName$1(name);
const key = find$1(this[MAP$1], name);
if (key !== undefined) {
delete this[MAP$1][key];
}
}
/**
* Return raw headers (non-spec api)
*
* @return Object
*/
raw() {
return this[MAP$1];
}
/**
* Get an iterator on keys.
*
* @return Iterator
*/
keys() {
return createHeadersIterator$1(this, 'key');
}
/**
* Get an iterator on values.
*
* @return Iterator
*/
values() {
return createHeadersIterator$1(this, 'value');
}
/**
* Get an iterator on entries.
*
* This is the default iterator of the Headers object.
*
* @return Iterator
*/
[Symbol.iterator]() {
return createHeadersIterator$1(this, 'key+value');
}
}
Headers$1.prototype.entries = Headers$1.prototype[Symbol.iterator];
Object.defineProperty(Headers$1.prototype, Symbol.toStringTag, {
value: 'Headers',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Headers$1.prototype, {
get: {
enumerable: true
},
forEach: {
enumerable: true
},
set: {
enumerable: true
},
append: {
enumerable: true
},
has: {
enumerable: true
},
delete: {
enumerable: true
},
keys: {
enumerable: true
},
values: {
enumerable: true
},
entries: {
enumerable: true
}
});
function getHeaders$1(headers) {
let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
const keys = Object.keys(headers[MAP$1]).sort();
return keys.map(kind === 'key' ? function (k) {
return k.toLowerCase();
} : kind === 'value' ? function (k) {
return headers[MAP$1][k].join(', ');
} : function (k) {
return [k.toLowerCase(), headers[MAP$1][k].join(', ')];
});
}
const INTERNAL$1 = Symbol('internal');
function createHeadersIterator$1(target, kind) {
const iterator = Object.create(HeadersIteratorPrototype$1);
iterator[INTERNAL$1] = {
target,
kind,
index: 0
};
return iterator;
}
const HeadersIteratorPrototype$1 = Object.setPrototypeOf({
next() {
// istanbul ignore if
if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype$1) {
throw new TypeError('Value of `this` is not a HeadersIterator');
}
var _INTERNAL = this[INTERNAL$1];
const target = _INTERNAL.target,
kind = _INTERNAL.kind,
index = _INTERNAL.index;
const values = getHeaders$1(target, kind);
const len = values.length;
if (index >= len) {
return {
value: undefined,
done: true
};
}
this[INTERNAL$1].index = index + 1;
return {
value: values[index],
done: false
};
}
}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
Object.defineProperty(HeadersIteratorPrototype$1, Symbol.toStringTag, {
value: 'HeadersIterator',
writable: false,
enumerable: false,
configurable: true
});
/**
* Export the Headers object in a form that Node.js can consume.
*
* @param Headers headers
* @return Object
*/
function exportNodeCompatibleHeaders$1(headers) {
const obj = Object.assign({
__proto__: null
}, headers[MAP$1]);
// http.request() only supports string as Host header. This hack makes
// specifying custom Host header possible.
const hostHeaderKey = find$1(headers[MAP$1], 'Host');
if (hostHeaderKey !== undefined) {
obj[hostHeaderKey] = obj[hostHeaderKey][0];
}
return obj;
}
/**
* Create a Headers object from an object of headers, ignoring those that do
* not conform to HTTP grammar productions.
*
* @param Object obj Object of headers
* @return Headers
*/
function createHeadersLenient$1(obj) {
const headers = new Headers$1();
for (const name of Object.keys(obj)) {
if (invalidTokenRegex$1.test(name)) {
continue;
}
if (Array.isArray(obj[name])) {
for (const val of obj[name]) {
if (invalidHeaderCharRegex$1.test(val)) {
continue;
}
if (headers[MAP$1][name] === undefined) {
headers[MAP$1][name] = [val];
} else {
headers[MAP$1][name].push(val);
}
}
} else if (!invalidHeaderCharRegex$1.test(obj[name])) {
headers[MAP$1][name] = [obj[name]];
}
}
return headers;
}
const INTERNALS$1$1 = Symbol('Response internals');
// fix an issue where "STATUS_CODES" aren't a named export for node <10
const STATUS_CODES$1 = http.STATUS_CODES;
/**
* Response class
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
class Response$1 {
constructor() {
let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
Body$2.call(this, body, opts);
const status = opts.status || 200;
const headers = new Headers$1(opts.headers);
if (body != null && !headers.has('Content-Type')) {
const contentType = extractContentType$2(body);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
this[INTERNALS$1$1] = {
url: opts.url,
status,
statusText: opts.statusText || STATUS_CODES$1[status],
headers,
counter: opts.counter
};
}
get url() {
return this[INTERNALS$1$1].url || '';
}
get status() {
return this[INTERNALS$1$1].status;
}
/**
* Convenience property representing if the request ended normally
*/
get ok() {
return this[INTERNALS$1$1].status >= 200 && this[INTERNALS$1$1].status < 300;
}
get redirected() {
return this[INTERNALS$1$1].counter > 0;
}
get statusText() {
return this[INTERNALS$1$1].statusText;
}
get headers() {
return this[INTERNALS$1$1].headers;
}
/**
* Clone this response
*
* @return Response
*/
clone() {
return new Response$1(clone$2(this), {
url: this.url,
status: this.status,
statusText: this.statusText,
headers: this.headers,
ok: this.ok,
redirected: this.redirected
});
}
}
Body$2.mixIn(Response$1.prototype);
Object.defineProperties(Response$1.prototype, {
url: {
enumerable: true
},
status: {
enumerable: true
},
ok: {
enumerable: true
},
redirected: {
enumerable: true
},
statusText: {
enumerable: true
},
headers: {
enumerable: true
},
clone: {
enumerable: true
}
});
Object.defineProperty(Response$1.prototype, Symbol.toStringTag, {
value: 'Response',
writable: false,
enumerable: false,
configurable: true
});
const INTERNALS$2$1 = Symbol('Request internals');
const URL$3 = Url.URL || publicApi.URL;
// fix an issue where "format", "parse" aren't a named export for node <10
const parse_url$1 = Url.parse;
const format_url$1 = Url.format;
/**
* Wrapper around `new URL` to handle arbitrary URLs
*
* @param {string} urlStr
* @return {void}
*/
function parseURL$1(urlStr) {
/*
Check whether the URL is absolute or not
Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
*/
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
urlStr = new URL$3(urlStr).toString();
}
// Fallback to old implementation for arbitrary URLs
return parse_url$1(urlStr);
}
const streamDestructionSupported$1 = ('destroy' in Stream.Readable.prototype);
/**
* Check if a value is an instance of Request.
*
* @param Mixed input
* @return Boolean
*/
function isRequest$1(input) {
return typeof input === 'object' && typeof input[INTERNALS$2$1] === 'object';
}
function isAbortSignal$1(signal) {
const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
return !!(proto && proto.constructor.name === 'AbortSignal');
}
/**
* Request class
*
* @param Mixed input Url or Request instance
* @param Object init Custom options
* @return Void
*/
class Request$1 {
constructor(input) {
let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
let parsedURL;
// normalize input
if (!isRequest$1(input)) {
if (input && input.href) {
// in order to support Node.js' Url objects; though WHATWG's URL objects
// will fall into this branch also (since their `toString()` will return
// `href` property anyway)
parsedURL = parseURL$1(input.href);
} else {
// coerce input to a string before attempting to parse
parsedURL = parseURL$1(`${input}`);
}
input = {};
} else {
parsedURL = parseURL$1(input.url);
}
let method = init.method || input.method || 'GET';
method = method.toUpperCase();
if ((init.body != null || isRequest$1(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
throw new TypeError('Request with GET/HEAD method cannot have body');
}
let inputBody = init.body != null ? init.body : isRequest$1(input) && input.body !== null ? clone$2(input) : null;
Body$2.call(this, inputBody, {
timeout: init.timeout || input.timeout || 0,
size: init.size || input.size || 0
});
const headers = new Headers$1(init.headers || input.headers || {});
if (inputBody != null && !headers.has('Content-Type')) {
const contentType = extractContentType$2(inputBody);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
let signal = isRequest$1(input) ? input.signal : null;
if ('signal' in init) signal = init.signal;
if (signal != null && !isAbortSignal$1(signal)) {
throw new TypeError('Expected signal to be an instanceof AbortSignal');
}
this[INTERNALS$2$1] = {
method,
redirect: init.redirect || input.redirect || 'follow',
headers,
parsedURL,
signal
};
// node-fetch-only options
this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
this.counter = init.counter || input.counter || 0;
this.agent = init.agent || input.agent;
}
get method() {
return this[INTERNALS$2$1].method;
}
get url() {
return format_url$1(this[INTERNALS$2$1].parsedURL);
}
get headers() {
return this[INTERNALS$2$1].headers;
}
get redirect() {
return this[INTERNALS$2$1].redirect;
}
get signal() {
return this[INTERNALS$2$1].signal;
}
/**
* Clone this request
*
* @return Request
*/
clone() {
return new Request$1(this);
}
}
Body$2.mixIn(Request$1.prototype);
Object.defineProperty(Request$1.prototype, Symbol.toStringTag, {
value: 'Request',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Request$1.prototype, {
method: {
enumerable: true
},
url: {
enumerable: true
},
headers: {
enumerable: true
},
redirect: {
enumerable: true
},
clone: {
enumerable: true
},
signal: {
enumerable: true
}
});
/**
* Convert a Request to Node.js http request options.
*
* @param Request A Request instance
* @return Object The options object to be passed to http.request
*/
function getNodeRequestOptions$1(request) {
const parsedURL = request[INTERNALS$2$1].parsedURL;
const headers = new Headers$1(request[INTERNALS$2$1].headers);
// fetch step 1.3
if (!headers.has('Accept')) {
headers.set('Accept', '*/*');
}
// Basic fetch
if (!parsedURL.protocol || !parsedURL.hostname) {
throw new TypeError('Only absolute URLs are supported');
}
if (!/^https?:$/.test(parsedURL.protocol)) {
throw new TypeError('Only HTTP(S) protocols are supported');
}
if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported$1) {
throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
}
// HTTP-network-or-cache fetch steps 2.4-2.7
let contentLengthValue = null;
if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
contentLengthValue = '0';
}
if (request.body != null) {
const totalBytes = getTotalBytes$1(request);
if (typeof totalBytes === 'number') {
contentLengthValue = String(totalBytes);
}
}
if (contentLengthValue) {
headers.set('Content-Length', contentLengthValue);
}
// HTTP-network-or-cache fetch step 2.11
if (!headers.has('User-Agent')) {
headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
}
// HTTP-network-or-cache fetch step 2.15
if (request.compress && !headers.has('Accept-Encoding')) {
headers.set('Accept-Encoding', 'gzip,deflate');
}
let agent = request.agent;
if (typeof agent === 'function') {
agent = agent(parsedURL);
}
// HTTP-network fetch step 4.2
// chunked encoding is handled by Node.js
return Object.assign({}, parsedURL, {
method: request.method,
headers: exportNodeCompatibleHeaders$1(headers),
agent
});
}
/**
* abort-error.js
*
* AbortError interface for cancelled requests
*/
/**
* Create AbortError instance
*
* @param String message Error message for human
* @return AbortError
*/
function AbortError$1(message) {
Error.call(this, message);
this.type = 'aborted';
this.message = message;
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
AbortError$1.prototype = Object.create(Error.prototype);
AbortError$1.prototype.constructor = AbortError$1;
AbortError$1.prototype.name = 'AbortError';
const URL$1$2 = Url.URL || publicApi.URL;
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1$1 = Stream.PassThrough;
const isDomainOrSubdomain$1 = function isDomainOrSubdomain(destination, original) {
const orig = new URL$1$2(original).hostname;
const dest = new URL$1$2(destination).hostname;
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
};
/**
* isSameProtocol reports whether the two provided URLs use the same protocol.
*
* Both domains must already be in canonical form.
* @param {string|URL} original
* @param {string|URL} destination
*/
const isSameProtocol$1 = function isSameProtocol(destination, original) {
const orig = new URL$1$2(original).protocol;
const dest = new URL$1$2(destination).protocol;
return orig === dest;
};
/**
* Fetch function
*
* @param Mixed url Absolute url or Request instance
* @param Object opts Fetch options
* @return Promise
*/
function fetch$2(url, opts) {
// allow custom promise
if (!fetch$2.Promise) {
throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
}
Body$2.Promise = fetch$2.Promise;
// wrap http.request into fetch
return new fetch$2.Promise(function (resolve, reject) {
// build request object
const request = new Request$1(url, opts);
const options = getNodeRequestOptions$1(request);
const send = (options.protocol === 'https:' ? https : http).request;
const signal = request.signal;
let response = null;
const abort = function abort() {
let error = new AbortError$1('The user aborted a request.');
reject(error);
if (request.body && request.body instanceof Stream.Readable) {
destroyStream$1(request.body, error);
}
if (!response || !response.body) return;
response.body.emit('error', error);
};
if (signal && signal.aborted) {
abort();
return;
}
const abortAndFinalize = function abortAndFinalize() {
abort();
finalize();
};
// send request
const req = send(options);
let reqTimeout;
if (signal) {
signal.addEventListener('abort', abortAndFinalize);
}
function finalize() {
req.abort();
if (signal) signal.removeEventListener('abort', abortAndFinalize);
clearTimeout(reqTimeout);
}
if (request.timeout) {
req.once('socket', function (socket) {
reqTimeout = setTimeout(function () {
reject(new FetchError$1(`network timeout at: ${request.url}`, 'request-timeout'));
finalize();
}, request.timeout);
});
}
req.on('error', function (err) {
reject(new FetchError$1(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
if (response && response.body) {
destroyStream$1(response.body, err);
}
finalize();
});
fixResponseChunkedTransferBadEnding$1(req, function (err) {
if (signal && signal.aborted) {
return;
}
if (response && response.body) {
destroyStream$1(response.body, err);
}
});
/* c8 ignore next 18 */
if (parseInt(process.version.substring(1)) < 14) {
// Before Node.js 14, pipeline() does not fully support async iterators and does not always
// properly handle when the socket close/end events are out of order.
req.on('socket', function (s) {
s.addListener('close', function (hadError) {
// if a data listener is still present we didn't end cleanly
const hasDataListener = s.listenerCount('data') > 0;
// if end happened before close but the socket didn't emit an error, do it now
if (response && hasDataListener && !hadError && !(signal && signal.aborted)) {
const err = new Error('Premature close');
err.code = 'ERR_STREAM_PREMATURE_CLOSE';
response.body.emit('error', err);
}
});
});
}
req.on('response', function (res) {
clearTimeout(reqTimeout);
const headers = createHeadersLenient$1(res.headers);
// HTTP fetch step 5
if (fetch$2.isRedirect(res.statusCode)) {
// HTTP fetch step 5.2
const location = headers.get('Location');
// HTTP fetch step 5.3
let locationURL = null;
try {
locationURL = location === null ? null : new URL$1$2(location, request.url).toString();
} catch (err) {
// error here can only be invalid URL in Location: header
// do not throw when options.redirect == manual
// let the user extract the errorneous redirect URL
if (request.redirect !== 'manual') {
reject(new FetchError$1(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
finalize();
return;
}
}
// HTTP fetch step 5.5
switch (request.redirect) {
case 'error':
reject(new FetchError$1(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
finalize();
return;
case 'manual':
// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
if (locationURL !== null) {
// handle corrupted header
try {
headers.set('Location', locationURL);
} catch (err) {
// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
reject(err);
}
}
break;
case 'follow':
// HTTP-redirect fetch step 2
if (locationURL === null) {
break;
}
// HTTP-redirect fetch step 5
if (request.counter >= request.follow) {
reject(new FetchError$1(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 6 (counter increment)
// Create a new Request object.
const requestOpts = {
headers: new Headers$1(request.headers),
follow: request.follow,
counter: request.counter + 1,
agent: request.agent,
compress: request.compress,
method: request.method,
body: request.body,
signal: request.signal,
timeout: request.timeout,
size: request.size
};
if (!isDomainOrSubdomain$1(request.url, locationURL) || !isSameProtocol$1(request.url, locationURL)) {
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
requestOpts.headers.delete(name);
}
}
// HTTP-redirect fetch step 9
if (res.statusCode !== 303 && request.body && getTotalBytes$1(request) === null) {
reject(new FetchError$1('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 11
if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
requestOpts.method = 'GET';
requestOpts.body = undefined;
requestOpts.headers.delete('content-length');
}
// HTTP-redirect fetch step 15
resolve(fetch$2(new Request$1(locationURL, requestOpts)));
finalize();
return;
}
}
// prepare response
res.once('end', function () {
if (signal) signal.removeEventListener('abort', abortAndFinalize);
});
let body = res.pipe(new PassThrough$1$1());
const response_options = {
url: request.url,
status: res.statusCode,
statusText: res.statusMessage,
headers: headers,
size: request.size,
timeout: request.timeout,
counter: request.counter
};
// HTTP-network fetch step 12.1.1.3
const codings = headers.get('Content-Encoding');
// HTTP-network fetch step 12.1.1.4: handle content codings
// in following scenarios we ignore compression support
// 1. compression support is disabled
// 2. HEAD request
// 3. no Content-Encoding header
// 4. no content response (204)
// 5. content not modified response (304)
if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
response = new Response$1(body, response_options);
resolve(response);
return;
}
// For Node v6+
// Be less strict when decoding compressed responses, since sometimes
// servers send slightly invalid responses that are still accepted
// by common browsers.
// Always using Z_SYNC_FLUSH is what cURL does.
const zlibOptions = {
flush: zlib.Z_SYNC_FLUSH,
finishFlush: zlib.Z_SYNC_FLUSH
};
// for gzip
if (codings == 'gzip' || codings == 'x-gzip') {
body = body.pipe(zlib.createGunzip(zlibOptions));
response = new Response$1(body, response_options);
resolve(response);
return;
}
// for deflate
if (codings == 'deflate' || codings == 'x-deflate') {
// handle the infamous raw deflate response from old servers
// a hack for old IIS and Apache servers
const raw = res.pipe(new PassThrough$1$1());
raw.once('data', function (chunk) {
// see http://stackoverflow.com/questions/37519828
if ((chunk[0] & 0x0F) === 0x08) {
body = body.pipe(zlib.createInflate());
} else {
body = body.pipe(zlib.createInflateRaw());
}
response = new Response$1(body, response_options);
resolve(response);
});
raw.on('end', function () {
// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.
if (!response) {
response = new Response$1(body, response_options);
resolve(response);
}
});
return;
}
// for br
if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
body = body.pipe(zlib.createBrotliDecompress());
response = new Response$1(body, response_options);
resolve(response);
return;
}
// otherwise, use response as-is
response = new Response$1(body, response_options);
resolve(response);
});
writeToStream$1(req, request);
});
}
function fixResponseChunkedTransferBadEnding$1(request, errorCallback) {
let socket;
request.on('socket', function (s) {
socket = s;
});
request.on('response', function (response) {
const headers = response.headers;
if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {
response.once('close', function (hadError) {
// tests for socket presence, as in some situations the
// the 'socket' event is not triggered for the request
// (happens in deno), avoids `TypeError`
// if a data listener is still present we didn't end cleanly
const hasDataListener = socket && socket.listenerCount('data') > 0;
if (hasDataListener && !hadError) {
const err = new Error('Premature close');
err.code = 'ERR_STREAM_PREMATURE_CLOSE';
errorCallback(err);
}
});
}
});
}
function destroyStream$1(stream, err) {
if (stream.destroy) {
stream.destroy(err);
} else {
// node < 8
stream.emit('error', err);
stream.end();
}
}
/**
* Redirect code matching
*
* @param Number code Status code
* @return Boolean
*/
fetch$2.isRedirect = function (code) {
return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
};
// expose Promise
fetch$2.Promise = global.Promise;
var lib$1 = {
__proto__: null,
'default': fetch$2,
Headers: Headers$1,
Request: Request$1,
Response: Response$1,
FetchError: FetchError$1,
AbortError: AbortError$1
};
function serializeHeaders(headers) {
return headers.raw();
}
function deserializeHeaders(fetch, old = {}) {
const headers = new fetch.Headers();
for (const name in old) {
for (const value of old[name]) {
headers.append(name, value);
}
}
return headers;
}
function serializeRequest(request) {
return [request.url, {
method: request.method,
headers: request.headers,
body: request.body,
mode: request.mode,
credentials: request.credentials,
cache: request.cache,
redirect: request.redirect,
referrer: request.referrer,
referrerPolicy: request.referrerPolicy,
integrity: request.integrity,
keepalive: request.keepalive,
// signal: request.signal,
// node-fetch props
follow: request.follow,
timeout: request.timeout,
compress: request.compress,
size: request.size
// agent: request.agent
}];
}
function deserializeRequest(fetch, resource, init) {
return new fetch.Request(resource, {
...init,
body: init.body ? Buffer.from(init.body, 'base64') : undefined,
headers: deserializeHeaders(fetch, init.headers)
});
}
function serializeResponse(response) {
return {
url: response.url,
headers: response.headers.raw(),
status: response.status,
statusText: response.statusText,
counter: response.redirected ? 1 : 0 // could be more than one, but no way of telling
};
}
function deserializeResponse(fetch, body, init, bodyError) {
const buffer = Buffer.from(body, 'base64');
return new fetch.Response(body ? createStream(buffer) : createStream(null), {
...init,
headers: deserializeHeaders(fetch, init.headers)
}, {
buffer,
bodyError
});
}
const errors = {
TypeError
};
function serializeError({
constructor,
message,
type,
code
}) {
return [constructor.name, [message, type, {
code
}]];
}
function deserializeError(fetch, name, init) {
if (name in errors) {
return new errors[name](...init);
} else {
return new fetch.FetchError(...init);
}
}
function parseBodyType(body) {
if (body == null) {
return 'Null';
} else if (body.constructor.name === 'URLSearchParams') {
return 'URLSearchParams';
} else if (Buffer.isBuffer(body)) {
return 'Buffer';
} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
return 'ArrayBuffer';
} else if (ArrayBuffer.isView(body)) {
return 'ArrayBufferView';
} else if (body instanceof Stream) {
return 'Stream';
} else {
return 'String';
}
}
function parseBody(body, type = parseBodyType(body)) {
switch (type) {
case 'Null':
return null;
case 'URLSearchParams':
return Buffer.from(body.toString());
case 'Buffer':
return body;
case 'ArrayBuffer':
return Buffer.from(body);
case 'ArrayBufferView':
return Buffer.from(body.buffer, body.byteOffset, body.byteLength);
case 'String':
return Buffer.from(String(body));
default:
throw new TypeError(`sync-fetch does not support bodies of type: ${type}`);
}
}
function createStream(buffer) {
return new Stream.Transform({
read() {
this.push(buffer);
this.push(null);
}
});
}
var shared = {
serializeHeaders,
deserializeHeaders,
serializeRequest,
deserializeRequest,
serializeResponse,
deserializeResponse,
serializeError,
deserializeError,
parseBodyType,
parseBody,
createStream
};
const exec = require$$0.execFileSync;
const {
URL: URL$2
} = Url;
function fetch$1(resource, init) {
const request = [];
if (resource instanceof fetch$1.Request) {
request.push(...shared.serializeRequest(resource));
} else if (resource instanceof URL$2) {
request.push(resource.href, {});
} else {
request.push(resource, {});
}
Object.assign(request[1], init);
request[1].headers = new lib$1.Headers(request[1].headers);
if (request[1].body) {
const contentType = extractContentType$1(request);
if (contentType && !request[1].headers.get('content-type')) {
request[1].headers.append('content-type', contentType);
}
request[1].body = shared.parseBody(init.body).toString('base64');
}
request[1].headers = shared.serializeHeaders(request[1].headers);
// TODO credentials
const response = JSON.parse(sendMessage(request));
if ('headers' in response[1]) {
return shared.deserializeResponse(fetch$1, ...response);
} else {
throw shared.deserializeError(fetch$1, ...response);
}
}
function sendMessage(message) {
return exec(process.execPath, [path.join(__dirname, 'worker.js')], {
windowsHide: true,
maxBuffer: Infinity,
input: JSON.stringify(message),
shell: false
}).toString();
}
function extractContentType$1(input) {
const request = new lib$1.Request(...input);
return request.headers.get('content-type') || undefined;
}
const _body = Symbol('bodyBuffer');
const _bodyError = Symbol('bodyError');
class SyncRequest extends lib$1.Request {
constructor(resource, init = {}) {
const buffer = shared.parseBody(init.body);
super(resource, init);
defineBuffer(this, buffer);
}
clone() {
checkBody(this);
return new SyncRequest(...shared.serializeRequest(this));
}
}
class SyncResponse extends lib$1.Response {
constructor(body, init, options = {}) {
const {
buffer = shared.parseBody(body),
bodyError
} = options;
super(body, init);
defineBuffer(this, buffer);
if (bodyError) defineBodyError(this, bodyError);
}
clone() {
checkBody(this);
const buffer = Buffer.from(this[_body]);
return new SyncResponse(shared.createStream(buffer), shared.serializeResponse(this), {
buffer,
bodyError: this[_bodyError]
});
}
}
class Body$1 {
static mixin(proto) {
for (const name of Object.getOwnPropertyNames(Body$1.prototype)) {
if (name === 'constructor') {
continue;
}
const desc = Object.getOwnPropertyDescriptor(Body$1.prototype, name);
Object.defineProperty(proto, name, {
...desc,
enumerable: true
});
}
}
arrayBuffer() {
checkBody(this);
const buf = consumeBody$1(this);
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
}
text() {
checkBody(this);
return consumeBody$1(this).toString();
}
json() {
checkBody(this);
try {
return JSON.parse(consumeBody$1(this).toString());
} catch (err) {
throw new fetch$1.FetchError(`invalid json response body at ${this.url} reason: ${err.message}`, 'invalid-json');
}
}
buffer() {
checkBody(this);
return Buffer.from(consumeBody$1(this));
}
textConverted() {
throw new fetch$1.FetchError('textConverted not implemented');
}
}
function _super(self, method) {
return Object.getPrototypeOf(Object.getPrototypeOf(self))[method].bind(self);
}
function checkBody(body) {
if (body[_bodyError]) {
throw body[_bodyError];
}
if (body.bodyUsed) {
throw new TypeError(`body used already for: ${body.url}`);
}
}
function consumeBody$1(body) {
_super(body, 'buffer')().catch(error => console.error(error));
return body[_body] || Buffer.alloc(0);
}
function defineBuffer(body, buffer) {
Object.defineProperty(body, _body, {
value: buffer,
enumerable: false
});
}
function defineBodyError(body, error) {
Object.defineProperty(body, _bodyError, {
value: shared.deserializeError(fetch$1, ...error),
enumerable: false
});
}
Body$1.mixin(SyncRequest.prototype);
Body$1.mixin(SyncResponse.prototype);
Object.defineProperties(SyncRequest.prototype, {
clone: {
enumerable: true
}
});
Object.defineProperties(SyncResponse.prototype, {
clone: {
enumerable: true
}
});
fetch$1.Headers = lib$1.Headers;
fetch$1.FetchError = lib$1.FetchError;
fetch$1.Request = SyncRequest;
fetch$1.Response = SyncResponse;
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
// fix for "Readable" isn't a named export issue
const Readable = Stream.Readable;
const BUFFER = Symbol('buffer');
const TYPE$1 = Symbol('type');
class Blob {
constructor() {
this[TYPE$1] = '';
const blobParts = arguments[0];
const options = arguments[1];
const buffers = [];
if (blobParts) {
const a = blobParts;
const length = Number(a.length);
for (let i = 0; i < length; i++) {
const element = a[i];
let buffer;
if (element instanceof Buffer) {
buffer = element;
} else if (ArrayBuffer.isView(element)) {
buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
} else if (element instanceof ArrayBuffer) {
buffer = Buffer.from(element);
} else if (element instanceof Blob) {
buffer = element[BUFFER];
} else {
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
}
buffers.push(buffer);
}
}
this[BUFFER] = Buffer.concat(buffers);
let type = options && options.type !== undefined && String(options.type).toLowerCase();
if (type && !/[^\u0020-\u007E]/.test(type)) {
this[TYPE$1] = type;
}
}
get size() {
return this[BUFFER].length;
}
get type() {
return this[TYPE$1];
}
text() {
return Promise.resolve(this[BUFFER].toString());
}
arrayBuffer() {
const buf = this[BUFFER];
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
return Promise.resolve(ab);
}
stream() {
const readable = new Readable();
readable._read = function () {};
readable.push(this[BUFFER]);
readable.push(null);
return readable;
}
toString() {
return '[object Blob]';
}
slice() {
const size = this.size;
const start = arguments[0];
const end = arguments[1];
let relativeStart, relativeEnd;
if (start === undefined) {
relativeStart = 0;
} else if (start < 0) {
relativeStart = Math.max(size + start, 0);
} else {
relativeStart = Math.min(start, size);
}
if (end === undefined) {
relativeEnd = size;
} else if (end < 0) {
relativeEnd = Math.max(size + end, 0);
} else {
relativeEnd = Math.min(end, size);
}
const span = Math.max(relativeEnd - relativeStart, 0);
const buffer = this[BUFFER];
const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
const blob = new Blob([], {
type: arguments[2]
});
blob[BUFFER] = slicedBuffer;
return blob;
}
}
Object.defineProperties(Blob.prototype, {
size: {
enumerable: true
},
type: {
enumerable: true
},
slice: {
enumerable: true
}
});
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
value: 'Blob',
writable: false,
enumerable: false,
configurable: true
});
/**
* fetch-error.js
*
* FetchError interface for operational errors
*/
/**
* Create FetchError instance
*
* @param String message Error message for human
* @param String type Error type for machine
* @param String systemError For Node.js system error
* @return FetchError
*/
function FetchError(message, type, systemError) {
Error.call(this, message);
this.message = message;
this.type = type;
// when err.type is `system`, err.code contains system error code
if (systemError) {
this.code = this.errno = systemError.code;
}
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
FetchError.prototype = Object.create(Error.prototype);
FetchError.prototype.constructor = FetchError;
FetchError.prototype.name = 'FetchError';
let convert;
try {
convert = require('encoding').convert;
} catch (e) {}
const INTERNALS = Symbol('Body internals');
// fix an issue where "PassThrough" isn't a named export for node <10
const PassThrough = Stream.PassThrough;
/**
* Body mixin
*
* Ref: https://fetch.spec.whatwg.org/#body
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
function Body(body) {
var _this = this;
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$size = _ref.size;
let size = _ref$size === undefined ? 0 : _ref$size;
var _ref$timeout = _ref.timeout;
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
if (body == null) {
// body is undefined or null
body = null;
} else if (isURLSearchParams(body)) {
// body is a URLSearchParams
body = Buffer.from(body.toString());
} else if (isBlob(body)) ;else if (Buffer.isBuffer(body)) ;else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
// body is ArrayBuffer
body = Buffer.from(body);
} else if (ArrayBuffer.isView(body)) {
// body is ArrayBufferView
body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
} else if (body instanceof Stream) ;else {
// none of the above
// coerce to string then buffer
body = Buffer.from(String(body));
}
this[INTERNALS] = {
body,
disturbed: false,
error: null
};
this.size = size;
this.timeout = timeout;
if (body instanceof Stream) {
body.on('error', function (err) {
const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
_this[INTERNALS].error = error;
});
}
}
Body.prototype = {
get body() {
return this[INTERNALS].body;
},
get bodyUsed() {
return this[INTERNALS].disturbed;
},
/**
* Decode response as ArrayBuffer
*
* @return Promise
*/
arrayBuffer() {
return consumeBody.call(this).then(function (buf) {
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
});
},
/**
* Return raw response as Blob
*
* @return Promise
*/
blob() {
let ct = this.headers && this.headers.get('content-type') || '';
return consumeBody.call(this).then(function (buf) {
return Object.assign(
// Prevent copying
new Blob([], {
type: ct.toLowerCase()
}), {
[BUFFER]: buf
});
});
},
/**
* Decode response as json
*
* @return Promise
*/
json() {
var _this2 = this;
return consumeBody.call(this).then(function (buffer) {
try {
return JSON.parse(buffer.toString());
} catch (err) {
return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
}
});
},
/**
* Decode response as text
*
* @return Promise
*/
text() {
return consumeBody.call(this).then(function (buffer) {
return buffer.toString();
});
},
/**
* Decode response as buffer (non-spec api)
*
* @return Promise
*/
buffer() {
return consumeBody.call(this);
},
/**
* Decode response as text, while automatically detecting the encoding and
* trying to decode to UTF-8 (non-spec api)
*
* @return Promise
*/
textConverted() {
var _this3 = this;
return consumeBody.call(this).then(function (buffer) {
return convertBody(buffer, _this3.headers);
});
}
};
// In browsers, all properties are enumerable.
Object.defineProperties(Body.prototype, {
body: {
enumerable: true
},
bodyUsed: {
enumerable: true
},
arrayBuffer: {
enumerable: true
},
blob: {
enumerable: true
},
json: {
enumerable: true
},
text: {
enumerable: true
}
});
Body.mixIn = function (proto) {
for (const name of Object.getOwnPropertyNames(Body.prototype)) {
// istanbul ignore else: future proof
if (!(name in proto)) {
const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
Object.defineProperty(proto, name, desc);
}
}
};
/**
* Consume and convert an entire Body to a Buffer.
*
* Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
*
* @return Promise
*/
function consumeBody() {
var _this4 = this;
if (this[INTERNALS].disturbed) {
return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
}
this[INTERNALS].disturbed = true;
if (this[INTERNALS].error) {
return Body.Promise.reject(this[INTERNALS].error);
}
let body = this.body;
// body is null
if (body === null) {
return Body.Promise.resolve(Buffer.alloc(0));
}
// body is blob
if (isBlob(body)) {
body = body.stream();
}
// body is buffer
if (Buffer.isBuffer(body)) {
return Body.Promise.resolve(body);
}
// istanbul ignore if: should never happen
if (!(body instanceof Stream)) {
return Body.Promise.resolve(Buffer.alloc(0));
}
// body is stream
// get ready to actually consume the body
let accum = [];
let accumBytes = 0;
let abort = false;
return new Body.Promise(function (resolve, reject) {
let resTimeout;
// allow timeout on slow response body
if (_this4.timeout) {
resTimeout = setTimeout(function () {
abort = true;
reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
}, _this4.timeout);
}
// handle stream errors
body.on('error', function (err) {
if (err.name === 'AbortError') {
// if the request was aborted, reject with this Error
abort = true;
reject(err);
} else {
// other errors, such as incorrect content-encoding
reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
}
});
body.on('data', function (chunk) {
if (abort || chunk === null) {
return;
}
if (_this4.size && accumBytes + chunk.length > _this4.size) {
abort = true;
reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
return;
}
accumBytes += chunk.length;
accum.push(chunk);
});
body.on('end', function () {
if (abort) {
return;
}
clearTimeout(resTimeout);
try {
resolve(Buffer.concat(accum, accumBytes));
} catch (err) {
// handle streams that have accumulated too much data (issue #414)
reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
}
});
});
}
/**
* Detect buffer encoding and convert to target encoding
* ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
*
* @param Buffer buffer Incoming buffer
* @param String encoding Target encoding
* @return String
*/
function convertBody(buffer, headers) {
if (typeof convert !== 'function') {
throw new Error('The package `encoding` must be installed to use the textConverted() function');
}
const ct = headers.get('content-type');
let charset = 'utf-8';
let res, str;
// header
if (ct) {
res = /charset=([^;]*)/i.exec(ct);
}
// no charset in content type, peek at response body for at most 1024 bytes
str = buffer.slice(0, 1024).toString();
// html5
if (!res && str) {
res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;
this[MAP] = Object.create(null);
if (init instanceof Headers) {
const rawHeaders = init.raw();
const headerNames = Object.keys(rawHeaders);
for (const headerName of headerNames) {
for (const value of rawHeaders[headerName]) {
this.append(headerName, value);
}
}
return;
}
// We don't worry about converting prop to ByteString here as append()
// will handle it.
if (init == null) ;else if (typeof init === 'object') {
const method = init[Symbol.iterator];
if (method != null) {
if (typeof method !== 'function') {
throw new TypeError('Header pairs must be iterable');
}
// sequence>
// Note: per spec we have to first exhaust the lists then process them
const pairs = [];
for (const pair of init) {
if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
throw new TypeError('Each header pair must be iterable');
}
pairs.push(Array.from(pair));
}
for (const pair of pairs) {
if (pair.length !== 2) {
throw new TypeError('Each header pair must be a name/value tuple');
}
this.append(pair[0], pair[1]);
}
} else {
// record
for (const key of Object.keys(init)) {
const value = init[key];
this.append(key, value);
}
}
} else {
throw new TypeError('Provided initializer must be an object');
}
}
/**
* Return combined header value given name
*
* @param String name Header name
* @return Mixed
*/
get(name) {
name = `${name}`;
validateName(name);
const key = find(this[MAP], name);
if (key === undefined) {
return null;
}
return this[MAP][key].join(', ');
}
/**
* Iterate over all headers
*
* @param Function callback Executed for each item with parameters (value, name, thisArg)
* @param Boolean thisArg `this` context for callback function
* @return Void
*/
forEach(callback) {
let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
let pairs = getHeaders(this);
let i = 0;
while (i < pairs.length) {
var _pairs$i = pairs[i];
const name = _pairs$i[0],
value = _pairs$i[1];
callback.call(thisArg, value, name, this);
pairs = getHeaders(this);
i++;
}
}
/**
* Overwrite header values given name
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
set(name, value) {
name = `${name}`;
value = `${value}`;
validateName(name);
validateValue(value);
const key = find(this[MAP], name);
this[MAP][key !== undefined ? key : name] = [value];
}
/**
* Append a value onto existing header
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
append(name, value) {
name = `${name}`;
value = `${value}`;
validateName(name);
validateValue(value);
const key = find(this[MAP], name);
if (key !== undefined) {
this[MAP][key].push(value);
} else {
this[MAP][name] = [value];
}
}
/**
* Check for header name existence
*
* @param String name Header name
* @return Boolean
*/
has(name) {
name = `${name}`;
validateName(name);
return find(this[MAP], name) !== undefined;
}
/**
* Delete all header values given name
*
* @param String name Header name
* @return Void
*/
delete(name) {
name = `${name}`;
validateName(name);
const key = find(this[MAP], name);
if (key !== undefined) {
delete this[MAP][key];
}
}
/**
* Return raw headers (non-spec api)
*
* @return Object
*/
raw() {
return this[MAP];
}
/**
* Get an iterator on keys.
*
* @return Iterator
*/
keys() {
return createHeadersIterator(this, 'key');
}
/**
* Get an iterator on values.
*
* @return Iterator
*/
values() {
return createHeadersIterator(this, 'value');
}
/**
* Get an iterator on entries.
*
* This is the default iterator of the Headers object.
*
* @return Iterator
*/
[Symbol.iterator]() {
return createHeadersIterator(this, 'key+value');
}
}
Headers.prototype.entries = Headers.prototype[Symbol.iterator];
Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
value: 'Headers',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Headers.prototype, {
get: {
enumerable: true
},
forEach: {
enumerable: true
},
set: {
enumerable: true
},
append: {
enumerable: true
},
has: {
enumerable: true
},
delete: {
enumerable: true
},
keys: {
enumerable: true
},
values: {
enumerable: true
},
entries: {
enumerable: true
}
});
function getHeaders(headers) {
let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
const keys = Object.keys(headers[MAP]).sort();
return keys.map(kind === 'key' ? function (k) {
return k.toLowerCase();
} : kind === 'value' ? function (k) {
return headers[MAP][k].join(', ');
} : function (k) {
return [k.toLowerCase(), headers[MAP][k].join(', ')];
});
}
const INTERNAL = Symbol('internal');
function createHeadersIterator(target, kind) {
const iterator = Object.create(HeadersIteratorPrototype);
iterator[INTERNAL] = {
target,
kind,
index: 0
};
return iterator;
}
const HeadersIteratorPrototype = Object.setPrototypeOf({
next() {
// istanbul ignore if
if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
throw new TypeError('Value of `this` is not a HeadersIterator');
}
var _INTERNAL = this[INTERNAL];
const target = _INTERNAL.target,
kind = _INTERNAL.kind,
index = _INTERNAL.index;
const values = getHeaders(target, kind);
const len = values.length;
if (index >= len) {
return {
value: undefined,
done: true
};
}
this[INTERNAL].index = index + 1;
return {
value: values[index],
done: false
};
}
}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
value: 'HeadersIterator',
writable: false,
enumerable: false,
configurable: true
});
/**
* Export the Headers object in a form that Node.js can consume.
*
* @param Headers headers
* @return Object
*/
function exportNodeCompatibleHeaders(headers) {
const obj = Object.assign({
__proto__: null
}, headers[MAP]);
// http.request() only supports string as Host header. This hack makes
// specifying custom Host header possible.
const hostHeaderKey = find(headers[MAP], 'Host');
if (hostHeaderKey !== undefined) {
obj[hostHeaderKey] = obj[hostHeaderKey][0];
}
return obj;
}
/**
* Create a Headers object from an object of headers, ignoring those that do
* not conform to HTTP grammar productions.
*
* @param Object obj Object of headers
* @return Headers
*/
function createHeadersLenient(obj) {
const headers = new Headers();
for (const name of Object.keys(obj)) {
if (invalidTokenRegex.test(name)) {
continue;
}
if (Array.isArray(obj[name])) {
for (const val of obj[name]) {
if (invalidHeaderCharRegex.test(val)) {
continue;
}
if (headers[MAP][name] === undefined) {
headers[MAP][name] = [val];
} else {
headers[MAP][name].push(val);
}
}
} else if (!invalidHeaderCharRegex.test(obj[name])) {
headers[MAP][name] = [obj[name]];
}
}
return headers;
}
const INTERNALS$1 = Symbol('Response internals');
// fix an issue where "STATUS_CODES" aren't a named export for node <10
const STATUS_CODES = http.STATUS_CODES;
/**
* Response class
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
class Response {
constructor() {
let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
Body.call(this, body, opts);
const status = opts.status || 200;
const headers = new Headers(opts.headers);
if (body != null && !headers.has('Content-Type')) {
const contentType = extractContentType(body);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
this[INTERNALS$1] = {
url: opts.url,
status,
statusText: opts.statusText || STATUS_CODES[status],
headers,
counter: opts.counter
};
}
get url() {
return this[INTERNALS$1].url || '';
}
get status() {
return this[INTERNALS$1].status;
}
/**
* Convenience property representing if the request ended normally
*/
get ok() {
return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
}
get redirected() {
return this[INTERNALS$1].counter > 0;
}
get statusText() {
return this[INTERNALS$1].statusText;
}
get headers() {
return this[INTERNALS$1].headers;
}
/**
* Clone this response
*
* @return Response
*/
clone() {
return new Response(clone$1(this), {
url: this.url,
status: this.status,
statusText: this.statusText,
headers: this.headers,
ok: this.ok,
redirected: this.redirected
});
}
}
Body.mixIn(Response.prototype);
Object.defineProperties(Response.prototype, {
url: {
enumerable: true
},
status: {
enumerable: true
},
ok: {
enumerable: true
},
redirected: {
enumerable: true
},
statusText: {
enumerable: true
},
headers: {
enumerable: true
},
clone: {
enumerable: true
}
});
Object.defineProperty(Response.prototype, Symbol.toStringTag, {
value: 'Response',
writable: false,
enumerable: false,
configurable: true
});
const INTERNALS$2 = Symbol('Request internals');
const URL$1 = Url.URL || publicApi.URL;
// fix an issue where "format", "parse" aren't a named export for node <10
const parse_url = Url.parse;
const format_url = Url.format;
/**
* Wrapper around `new URL` to handle arbitrary URLs
*
* @param {string} urlStr
* @return {void}
*/
function parseURL(urlStr) {
/*
Check whether the URL is absolute or not
Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
*/
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
urlStr = new URL$1(urlStr).toString();
}
// Fallback to old implementation for arbitrary URLs
return parse_url(urlStr);
}
const streamDestructionSupported = ('destroy' in Stream.Readable.prototype);
/**
* Check if a value is an instance of Request.
*
* @param Mixed input
* @return Boolean
*/
function isRequest(input) {
return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
}
function isAbortSignal(signal) {
const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
return !!(proto && proto.constructor.name === 'AbortSignal');
}
/**
* Request class
*
* @param Mixed input Url or Request instance
* @param Object init Custom options
* @return Void
*/
class Request {
constructor(input) {
let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
let parsedURL;
// normalize input
if (!isRequest(input)) {
if (input && input.href) {
// in order to support Node.js' Url objects; though WHATWG's URL objects
// will fall into this branch also (since their `toString()` will return
// `href` property anyway)
parsedURL = parseURL(input.href);
} else {
// coerce input to a string before attempting to parse
parsedURL = parseURL(`${input}`);
}
input = {};
} else {
parsedURL = parseURL(input.url);
}
let method = init.method || input.method || 'GET';
method = method.toUpperCase();
if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
throw new TypeError('Request with GET/HEAD method cannot have body');
}
let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone$1(input) : null;
Body.call(this, inputBody, {
timeout: init.timeout || input.timeout || 0,
size: init.size || input.size || 0
});
const headers = new Headers(init.headers || input.headers || {});
if (inputBody != null && !headers.has('Content-Type')) {
const contentType = extractContentType(inputBody);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
let signal = isRequest(input) ? input.signal : null;
if ('signal' in init) signal = init.signal;
if (signal != null && !isAbortSignal(signal)) {
throw new TypeError('Expected signal to be an instanceof AbortSignal');
}
this[INTERNALS$2] = {
method,
redirect: init.redirect || input.redirect || 'follow',
headers,
parsedURL,
signal
};
// node-fetch-only options
this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
this.counter = init.counter || input.counter || 0;
this.agent = init.agent || input.agent;
}
get method() {
return this[INTERNALS$2].method;
}
get url() {
return format_url(this[INTERNALS$2].parsedURL);
}
get headers() {
return this[INTERNALS$2].headers;
}
get redirect() {
return this[INTERNALS$2].redirect;
}
get signal() {
return this[INTERNALS$2].signal;
}
/**
* Clone this request
*
* @return Request
*/
clone() {
return new Request(this);
}
}
Body.mixIn(Request.prototype);
Object.defineProperty(Request.prototype, Symbol.toStringTag, {
value: 'Request',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Request.prototype, {
method: {
enumerable: true
},
url: {
enumerable: true
},
headers: {
enumerable: true
},
redirect: {
enumerable: true
},
clone: {
enumerable: true
},
signal: {
enumerable: true
}
});
/**
* Convert a Request to Node.js http request options.
*
* @param Request A Request instance
* @return Object The options object to be passed to http.request
*/
function getNodeRequestOptions(request) {
const parsedURL = request[INTERNALS$2].parsedURL;
const headers = new Headers(request[INTERNALS$2].headers);
// fetch step 1.3
if (!headers.has('Accept')) {
headers.set('Accept', '*/*');
}
// Basic fetch
if (!parsedURL.protocol || !parsedURL.hostname) {
throw new TypeError('Only absolute URLs are supported');
}
if (!/^https?:$/.test(parsedURL.protocol)) {
throw new TypeError('Only HTTP(S) protocols are supported');
}
if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
}
// HTTP-network-or-cache fetch steps 2.4-2.7
let contentLengthValue = null;
if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
contentLengthValue = '0';
}
if (request.body != null) {
const totalBytes = getTotalBytes(request);
if (typeof totalBytes === 'number') {
contentLengthValue = String(totalBytes);
}
}
if (contentLengthValue) {
headers.set('Content-Length', contentLengthValue);
}
// HTTP-network-or-cache fetch step 2.11
if (!headers.has('User-Agent')) {
headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
}
// HTTP-network-or-cache fetch step 2.15
if (request.compress && !headers.has('Accept-Encoding')) {
headers.set('Accept-Encoding', 'gzip,deflate');
}
let agent = request.agent;
if (typeof agent === 'function') {
agent = agent(parsedURL);
}
// HTTP-network fetch step 4.2
// chunked encoding is handled by Node.js
return Object.assign({}, parsedURL, {
method: request.method,
headers: exportNodeCompatibleHeaders(headers),
agent
});
}
/**
* abort-error.js
*
* AbortError interface for cancelled requests
*/
/**
* Create AbortError instance
*
* @param String message Error message for human
* @return AbortError
*/
function AbortError(message) {
Error.call(this, message);
this.type = 'aborted';
this.message = message;
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
AbortError.prototype = Object.create(Error.prototype);
AbortError.prototype.constructor = AbortError;
AbortError.prototype.name = 'AbortError';
const URL$1$1 = Url.URL || publicApi.URL;
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1 = Stream.PassThrough;
const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
const orig = new URL$1$1(original).hostname;
const dest = new URL$1$1(destination).hostname;
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
};
/**
* isSameProtocol reports whether the two provided URLs use the same protocol.
*
* Both domains must already be in canonical form.
* @param {string|URL} original
* @param {string|URL} destination
*/
const isSameProtocol = function isSameProtocol(destination, original) {
const orig = new URL$1$1(original).protocol;
const dest = new URL$1$1(destination).protocol;
return orig === dest;
};
/**
* Fetch function
*
* @param Mixed url Absolute url or Request instance
* @param Object opts Fetch options
* @return Promise
*/
function fetch(url, opts) {
// allow custom promise
if (!fetch.Promise) {
throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
}
Body.Promise = fetch.Promise;
// wrap http.request into fetch
return new fetch.Promise(function (resolve, reject) {
// build request object
const request = new Request(url, opts);
const options = getNodeRequestOptions(request);
const send = (options.protocol === 'https:' ? https : http).request;
const signal = request.signal;
let response = null;
const abort = function abort() {
let error = new AbortError('The user aborted a request.');
reject(error);
if (request.body && request.body instanceof Stream.Readable) {
destroyStream(request.body, error);
}
if (!response || !response.body) return;
response.body.emit('error', error);
};
if (signal && signal.aborted) {
abort();
return;
}
const abortAndFinalize = function abortAndFinalize() {
abort();
finalize();
};
// send request
const req = send(options);
let reqTimeout;
if (signal) {
signal.addEventListener('abort', abortAndFinalize);
}
function finalize() {
req.abort();
if (signal) signal.removeEventListener('abort', abortAndFinalize);
clearTimeout(reqTimeout);
}
if (request.timeout) {
req.once('socket', function (socket) {
reqTimeout = setTimeout(function () {
reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
finalize();
}, request.timeout);
});
}
req.on('error', function (err) {
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
if (response && response.body) {
destroyStream(response.body, err);
}
finalize();
});
fixResponseChunkedTransferBadEnding(req, function (err) {
if (signal && signal.aborted) {
return;
}
if (response && response.body) {
destroyStream(response.body, err);
}
});
/* c8 ignore next 18 */
if (parseInt(process.version.substring(1)) < 14) {
// Before Node.js 14, pipeline() does not fully support async iterators and does not always
// properly handle when the socket close/end events are out of order.
req.on('socket', function (s) {
s.addListener('close', function (hadError) {
// if a data listener is still present we didn't end cleanly
const hasDataListener = s.listenerCount('data') > 0;
// if end happened before close but the socket didn't emit an error, do it now
if (response && hasDataListener && !hadError && !(signal && signal.aborted)) {
const err = new Error('Premature close');
err.code = 'ERR_STREAM_PREMATURE_CLOSE';
response.body.emit('error', err);
}
});
});
}
req.on('response', function (res) {
clearTimeout(reqTimeout);
const headers = createHeadersLenient(res.headers);
// HTTP fetch step 5
if (fetch.isRedirect(res.statusCode)) {
// HTTP fetch step 5.2
const location = headers.get('Location');
// HTTP fetch step 5.3
let locationURL = null;
try {
locationURL = location === null ? null : new URL$1$1(location, request.url).toString();
} catch (err) {
// error here can only be invalid URL in Location: header
// do not throw when options.redirect == manual
// let the user extract the errorneous redirect URL
if (request.redirect !== 'manual') {
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
finalize();
return;
}
}
// HTTP fetch step 5.5
switch (request.redirect) {
case 'error':
reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
finalize();
return;
case 'manual':
// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
if (locationURL !== null) {
// handle corrupted header
try {
headers.set('Location', locationURL);
} catch (err) {
// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
reject(err);
}
}
break;
case 'follow':
// HTTP-redirect fetch step 2
if (locationURL === null) {
break;
}
// HTTP-redirect fetch step 5
if (request.counter >= request.follow) {
reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 6 (counter increment)
// Create a new Request object.
const requestOpts = {
headers: new Headers(request.headers),
follow: request.follow,
counter: request.counter + 1,
agent: request.agent,
compress: request.compress,
method: request.method,
body: request.body,
signal: request.signal,
timeout: request.timeout,
size: request.size
};
if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
requestOpts.headers.delete(name);
}
}
// HTTP-redirect fetch step 9
if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 11
if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
requestOpts.method = 'GET';
requestOpts.body = undefined;
requestOpts.headers.delete('content-length');
}
// HTTP-redirect fetch step 15
resolve(fetch(new Request(locationURL, requestOpts)));
finalize();
return;
}
}
// prepare response
res.once('end', function () {
if (signal) signal.removeEventListener('abort', abortAndFinalize);
});
let body = res.pipe(new PassThrough$1());
const response_options = {
url: request.url,
status: res.statusCode,
statusText: res.statusMessage,
headers: headers,
size: request.size,
timeout: request.timeout,
counter: request.counter
};
// HTTP-network fetch step 12.1.1.3
const codings = headers.get('Content-Encoding');
// HTTP-network fetch step 12.1.1.4: handle content codings
// in following scenarios we ignore compression support
// 1. compression support is disabled
// 2. HEAD request
// 3. no Content-Encoding header
// 4. no content response (204)
// 5. content not modified response (304)
if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
response = new Response(body, response_options);
resolve(response);
return;
}
// For Node v6+
// Be less strict when decoding compressed responses, since sometimes
// servers send slightly invalid responses that are still accepted
// by common browsers.
// Always using Z_SYNC_FLUSH is what cURL does.
const zlibOptions = {
flush: zlib.Z_SYNC_FLUSH,
finishFlush: zlib.Z_SYNC_FLUSH
};
// for gzip
if (codings == 'gzip' || codings == 'x-gzip') {
body = body.pipe(zlib.createGunzip(zlibOptions));
response = new Response(body, response_options);
resolve(response);
return;
}
// for deflate
if (codings == 'deflate' || codings == 'x-deflate') {
// handle the infamous raw deflate response from old servers
// a hack for old IIS and Apache servers
const raw = res.pipe(new PassThrough$1());
raw.once('data', function (chunk) {
// see http://stackoverflow.com/questions/37519828
if ((chunk[0] & 0x0F) === 0x08) {
body = body.pipe(zlib.createInflate());
} else {
body = body.pipe(zlib.createInflateRaw());
}
response = new Response(body, response_options);
resolve(response);
});
raw.on('end', function () {
// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.
if (!response) {
response = new Response(body, response_options);
resolve(response);
}
});
return;
}
// for br
if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
body = body.pipe(zlib.createBrotliDecompress());
response = new Response(body, response_options);
resolve(response);
return;
}
// otherwise, use response as-is
response = new Response(body, response_options);
resolve(response);
});
writeToStream(req, request);
});
}
function fixResponseChunkedTransferBadEnding(request, errorCallback) {
let socket;
request.on('socket', function (s) {
socket = s;
});
request.on('response', function (response) {
const headers = response.headers;
if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {
response.once('close', function (hadError) {
// tests for socket presence, as in some situations the
// the 'socket' event is not triggered for the request
// (happens in deno), avoids `TypeError`
// if a data listener is still present we didn't end cleanly
const hasDataListener = socket && socket.listenerCount('data') > 0;
if (hasDataListener && !hadError) {
const err = new Error('Premature close');
err.code = 'ERR_STREAM_PREMATURE_CLOSE';
errorCallback(err);
}
});
}
});
}
function destroyStream(stream, err) {
if (stream.destroy) {
stream.destroy(err);
} else {
// node < 8
stream.emit('error', err);
stream.end();
}
}
/**
* Redirect code matching
*
* @param Number code Status code
* @return Boolean
*/
fetch.isRedirect = function (code) {
return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
};
// expose Promise
fetch.Promise = global.Promise;
var lib = {
__proto__: null,
'default': fetch,
Headers: Headers,
Request: Request,
Response: Response,
FetchError: FetchError
};
function wrapFetchForNode(fetch) {
// Support schemaless URIs on the server for parity with the browser.
// https://github.com/matthew-andrews/isomorphic-fetch/pull/10
return function (u, options) {
if (typeof u === 'string' && u.slice(0, 2) === '//') {
return fetch('https:' + u, options);
}
return fetch(u, options);
};
}
var fetchNode = function (context) {
// Support webpack module import weirdness.
var fetchFn = lib.default ? lib.default : lib;
// This modifies the global `node-fetch` object, which isn't great, since
// different callers to `fetch-ponyfill` which pass a different Promise
// implementation would each expect to have their implementation used. But,
// given the way `node-fetch` is implemented, this is the only way to make
// it work at all.
if (context && context.Promise) {
fetchFn.Promise = context.Promise;
}
return {
fetch: wrapFetchForNode(fetchFn),
Headers: lib.Headers,
Request: lib.Request,
Response: lib.Response
};
};
//@ts-nocheck
// import pkg from '../../package.json';
fetchNode();
/**
* Generate ID
*
* @access protected
* @memberof module:@citation-js/core.util
*
* @param {Array} list - old ID list
* @param {String} prefix - ID prefix
*
* @return {String} CSL ID
*/
function fetchId(list, prefix) {
let id;
while (id === undefined || list.includes(id)) {
id = `${prefix}${Math.random().toString().slice(2)}`;
}
return id;
}
// @ts-nocheck
/**
* @memberof module:@citation-js/core.util
* @param {Object} [data={}] - initial values
*/
class Register {
constructor(data = {}) {
this.data = data;
}
/**
* @param {String} key
* @param {*} value
* @return {Register} this
*/
set(key, value) {
this.data[key] = value;
return this;
}
/**
* @param {String} key
* @param {*} value
* @return {Register} this
*/
add(...args) {
return this.set(...args);
}
/**
* @param {String} key
* @return {Register} this
*/
delete(key) {
delete this.data[key];
return this;
}
/**
* @param {String} key
* @return {Register} this
*/
remove(...args) {
return this.delete(...args);
}
/**
* @param {String} key
* @return {*} value
*/
get(key) {
return this.data[key];
}
/**
* @param {String} key
* @return {Boolean} register has key
*/
has(key) {
return Object.prototype.hasOwnProperty.call(this.data, key);
}
/**
* @return {Array} list of keys
*/
list() {
return Object.keys(this.data);
}
}
// @ts-nocheck
/**
* @typedef module:@citation-js/core.util.Grammar~ruleName
* @type {String}
*/
/**
* @callback module:@citation-js/core.util.Grammar~rule
* @this module:@citation-js/core.util.Grammar
*/
/**
* @memberof module:@citation-js/core.util
*
* @param {Object} rules
* @param {Object} state
*/
class Grammar {
constructor(rules, state) {
this.rules = rules;
this.defaultState = state;
this.mainRule = Object.keys(rules)[0];
this.log = [];
}
/**
* @param iterator - lexer supporting formatError() and next()
* @param [mainRule] - defaults to the first rule
* @return result of the main rule
*/
parse(iterator, mainRule) {
this.lexer = iterator;
this.token = this.lexer.next();
this.state = deepCopy(this.defaultState);
this.log = [];
return this.consumeRule(mainRule || this.mainRule);
}
/**
* @return {Boolean} true if there are no more tokens
*/
matchEndOfFile() {
return !this.token;
}
/**
* @param {String} type - a token type
* @return {Boolean} true if the current token has the given type
*/
matchToken(type) {
return this.token && type === this.token.type;
}
/**
* @param {String} [type] - a token type
* @param {Boolean} [optional=false] - false if it should throw an error if the type does not match
* @return {Object} token information
* @throws {SyntaxError} detailed syntax error if the current token is not the expected type or if there are no tokens left
*/
consumeToken(type, optional) {
const token = this.token;
if (!type || token && token.type === type) {
this.token = this.lexer.next();
return token;
} else if (optional) {
return undefined;
} else {
const got = token ? `"${token.type}"` : 'EOF';
const error = new SyntaxError(this.lexer.formatError(token, `expected "${type}", got ${got}`));
error.message += ` (${this.log.join('->')})`;
throw error;
}
}
/**
* @param {String} rule - a rule name
* @return whatever the rule function returns
*/
consumeRule(rule) {
this.log.push(rule);
const result = this.rules[rule].call(this);
this.log.pop();
return result;
}
}
// @ts-nocheck
/**
* Mapping unit.
*
* @typedef {Object} module:@citation-js/core.util.Translator~statement
* @property {String|Array} [source] - properties to source value from
* @property {String|Array} [target] - properties the value should go to
* @property {Object} [convert] - convert serialized or nested values
* @property {module:@citation-js/core.util.Translator~convertProp} [convert.toTarget] - function to convert source prop to target
* @property {module:@citation-js/core.util.Translator~convertProp} [convert.toSource] - function to convert target prop to source
* @property {Object} [when] - conditions as to when this statement should apply
* @property {module:@citation-js/core.util.Translator~condition} [when.source]
* @property {module:@citation-js/core.util.Translator~condition} [when.target]
*/
/**
* In the case of toTarget, source is input and target is output. In the case of
* toSource, source is output and target is input.
*
* @callback module:@citation-js/core.util.Translator~convertProp
* @param {...*} input - input values
* @return {Array|*} If output is an array and multiple output properties are
* specified, the output is divided over those properties.
*/
/**
* A top-level Boolean enables or disables a mapping unit in a given direction.
* Otherwise, individual properties are checked with an object specifying the
* property name and one of four things:
*
* - A boolean, checking for presence of the property
* - An array of values for checking whether the property value is in them
* - A value that should match with the property value
* - A predicate function taking in the value and returning a boolean
*
* All conditions have to be fulfilled for the mapping unit to be enabled.
*
* @typedef {Boolean|Object|module:@citation-js/core.util.Translator~conditionPropPredicate|*>} module:@citation-js/core.util.Translator~condition
*/
/**
* Return, based on a property, whether a mapping should apply.
*
* @callback module:@citation-js/core.util.Translator~conditionPropPredicate
* @param {*} input - input value
* @return {Boolean}
*/
/**
* Return, whether a mapping should apply.
*
* @callback module:@citation-js/core.util.Translator~conditionPredicate
* @param {Object} input - input
* @return {Boolean}
*/
/**
* @access private
* @memberof module:@citation-js/core.util.Translator
* @param {module:@citation-js/core.util.Translator~condition} condition
* @return {module:@citation-js/core.util.Translator~conditionPredicate}
*/
function createConditionEval(condition) {
return function conditionEval(input) {
if (typeof condition === 'boolean') {
return condition;
}
return Object.keys(condition).every(prop => {
const value = condition[prop];
if (value === true) {
return prop in input;
} else if (value === false) {
return !(prop in input);
} else if (typeof value === 'function') {
return value(input[prop]);
} else if (Array.isArray(value)) {
return value.includes(input[prop]);
} else {
return input[prop] === value;
}
});
};
}
/**
* @access private
* @typedef {Object} module:@citation-js/core.util.Translator~normalizedStatement
* @property {Array} inputProp
* @property {Array} outputProp
* @property {module:@citation-js/core.util.Translator~convertProp} convert
* @property {module:@citation-js/core.util.Translator~conditionPredicate} condition
*/
/**
* @access private
* @memberof module:@citation-js/core.util.Translator
* @param {module:@citation-js/core.util.Translator~statement} prop
* @param {Boolean} toSource
* @return {module:@citation-js/core.util.Translator~normalizedStatement} normalized one-directional object
*/
function parsePropStatement(prop, toSource) {
let inputProp;
let outputProp;
let convert;
let condition;
if (typeof prop === 'string') {
inputProp = outputProp = prop;
} else if (prop) {
inputProp = toSource ? prop.target : prop.source;
outputProp = toSource ? prop.source : prop.target;
if (prop.convert) {
convert = toSource ? prop.convert.toSource : prop.convert.toTarget;
}
if (prop.when) {
condition = toSource ? prop.when.target : prop.when.source;
if (condition != null) {
condition = createConditionEval(condition);
}
}
} else {
return null;
}
inputProp = [].concat(inputProp).filter(Boolean);
outputProp = [].concat(outputProp).filter(Boolean);
return {
inputProp,
outputProp,
convert,
condition
};
}
/**
* Return, whether a mapping should apply.
*
* @callback module:@citation-js/core.util.Translator~convert
* @param {Object} input - input
* @return {Object} output
*/
/**
* @access private
* @memberof module:@citation-js/core.util.Translator
* @param {Array} props
* @param {Boolean} toSource
* @return {module:@citation-js/core.util.Translator~convert} converter
*/
function createConverter(props, toSource) {
toSource = toSource === Translator.CONVERT_TO_SOURCE;
props = props.map(prop => parsePropStatement(prop, toSource)).filter(Boolean);
return function converter(input) {
const output = {};
for (const {
inputProp,
outputProp,
convert,
condition
} of props) {
// Skip when no output will be assigned
if (outputProp.length === 0) {
continue;
// Skip when requested by the requirements of the prop converter
} else if (condition && !condition(input)) {
continue;
// Skip when none of the required props are in the input data
// NOTE: if no input is required, do not skip
} else if (inputProp.length !== 0 && inputProp.every(prop => !(prop in input))) {
continue;
}
let outputData = inputProp.map(prop => input[prop]);
if (convert) {
try {
const converted = convert.apply(input, outputData);
outputData = outputProp.length === 1 ? [converted] : converted;
} catch (cause) {
throw new Error(`Failed to convert ${inputProp} to ${outputProp}`, {
cause
});
}
}
outputProp.forEach((prop, index) => {
const value = outputData[index];
if (value !== undefined) {
output[prop] = value;
}
});
}
return output;
};
}
/**
* @memberof module:@citation-js/core.util
*
* @param {Array} props
*
* @todo proper merging (?)
* @todo 'else' conditions
*/
class Translator {
constructor(props) {
/**
* @type {module:@citation-js/core.util.Translator~convert}
*/
this.convertToSource = createConverter(props, Translator.CONVERT_TO_SOURCE);
/**
* @type {module:@citation-js/core.util.Translator~convert}
*/
this.convertToTarget = createConverter(props, Translator.CONVERT_TO_TARGET);
}
}
/**
* @memberof module:@citation-js/core.util.Translator
* @property {Symbol} CONVERT_TO_SOURCE
*/
Translator.CONVERT_TO_SOURCE = Symbol('convert to source');
/**
* @memberof module:@citation-js/core.util.Translator
* @property {Symbol} CONVERT_TO_TARGET
*/
Translator.CONVERT_TO_TARGET = Symbol('convert to target');
// @ts-nocheck
/**
* @access private
* @param {Array} graph
* @return {String}
*/
function prepareParseGraph(graph) {
return graph
// collapse continuous iterations of the same type
.reduce((array, next) => {
const last = array[array.length - 1];
if (last && last.type === next.type) {
last.count = last.count + 1 || 2;
} else {
array.push(next);
}
return array;
}, [])
// presentation
.map(element => (element.count > 1 ? element.count + 'x ' : '') + element.type).join(' -> ');
}
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
* @constructor ChainParser
*
* @param {module:@citation-js/core~InputData} input
* @param {module:@citation-js/core~InputOptions} options
*/
class ChainParser {
constructor(input, options = {}) {
this.options = Object.assign({
generateGraph: true,
forceType: type(input),
maxChainLength: 10,
strict: true,
target: '@csl/list+object'
}, options);
this.type = this.options.forceType;
this.data = typeof input === 'object' ? deepCopy(input) : input;
this.graph = [{
type: this.type,
data: input
}];
this.iteration = 0;
}
/**
* After a round of data parsing, update type information and check targets.
*
* @access public
* @return {Boolean} Whether this is the last iteration or not
*/
iterate() {
if (this.iteration !== 0) {
const typeInfo = get$4(this.type);
if (typeInfo && typeInfo.outputs) {
this.type = typeInfo.outputs;
} else {
this.type = type(this.data);
}
this.graph.push({
type: this.type
});
}
if (this.error || this.type === this.options.target) {
return false;
} else if (this.iteration >= this.options.maxChainLength) {
this.error = new RangeError(`Max. number of parsing iterations reached (${prepareParseGraph(this.graph)})`);
return false;
} else {
this.iteration++;
return true;
}
}
/**
* Finish the iteration and return parsed data.
*
* @access public
* @return Array
*/
end() {
if (this.error) {
logger.error('[core]', this.error.message);
if (this.options.strict !== false) {
throw this.error;
} else {
return [];
}
} else if (this.options.target === '@csl/list+object') {
return upgradeCsl(this.data).map(this.options.generateGraph ? entry => applyGraph(entry, this.graph) : removeGraph);
} else {
return this.data;
}
}
}
/**
* Parse input until success.
*
* @access protected
* @method chain
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
* @param {module:@citation-js/core~InputOptions} [options] - options
*
* @return {Array} The parsed input
*/
const chain = (...args) => {
const chain = new ChainParser(...args);
while (chain.iterate()) {
try {
chain.data = data(chain.data, chain.type);
} catch (e) {
chain.error = e;
}
}
return chain.end();
};
/**
* Parse input once.
*
* @access protected
* @method chainLink
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
*
* @return {module:@citation-js/core~InputData} The parsed input
*/
const chainLink = input => {
const type$1 = type(input);
const output = type$1.match(/array|object/) ? deepCopy(input) : input;
return data(output, type$1);
};
/**
* Parse input until success. (async)
*
* @access protected
* @method chainAsync
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
* @param {module:@citation-js/core~InputOptions} [options] - options
*
* @return {Promise>} The parsed input
*/
const chainAsync = async (...args) => {
const chain = new ChainParser(...args);
while (chain.iterate()) {
chain.data = await dataAsync(chain.data, chain.type).catch(e => {
chain.error = e;
});
}
return chain.end();
};
/**
* Parse input once. (async)
*
* @access protected
* @method chainLinkAsync
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - The input data
*
* @return {Promise} The parsed input
*/
const chainLinkAsync = async input => {
const type$1 = type(input);
const output = type$1.match(/array|object/) ? deepCopy(input) : input;
return dataAsync(output, type$1);
};
// @ts-nocheck
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @typedef {Object} parsers
*/
const parsers = {};
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @typedef {Object} asyncParsers
*/
const asyncParsers = {};
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @typedef {Object} nativeParsers
*/
const nativeParsers = {
'@csl/object': input => [input],
'@csl/list+object': input => input,
'@else/list+object': input => input.map(chain).flat(),
'@invalid': () => {
throw new Error('This format is not supported or recognized');
}
};
/**
* @access private
* @memberof module:@citation-js/core.plugins.input
*
* @typedef {Object} nativeAsyncParsers
*/
const nativeAsyncParsers = {
'@else/list+object': async input => (await Promise.all(input.map(chainAsync))).flat()
};
/**
* @access public
* @method data
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
* @param {module:@citation-js/core.plugins.input~format} type - input type
*
* @return {*} parsed data
* @return {Null} if no parser available
*/
function data(input, type) {
if (typeof parsers[type] === 'function') {
return parsers[type](input);
} else {
throw new Error('This format is not supported or recognized');
// throw new TypeError(`No synchronous parser found for ${type}`)
}
}
/**
* @access public
* @method dataAsync
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core~InputData} input - input data
* @param {module:@citation-js/core.plugins.input~format} type - input type
*
* @return {Promise} parsed data
* @return {Promise} if no parser available
*/
async function dataAsync(input, type) {
if (typeof asyncParsers[type] === 'function') {
return asyncParsers[type](input);
} else if (typeof nativeAsyncParsers[type] === 'function') {
return nativeAsyncParsers[type](input);
} else if (hasDataParser(type, false)) {
return data(input, type);
} else {
throw new TypeError(`No parser found for ${type}`);
}
}
/**
* @access protected
* @method addDataParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format
* @param {module:@citation-js/core.plugins.input~parse|module:@citation-js/core.plugins.input~parseAsync} parser
* @param {Object} [options={}]
* @param {Boolean} [options.async=false]
*/
function addDataParser(format, {
parser,
async
}) {
if (async) {
asyncParsers[format] = parser;
} else {
parsers[format] = parser;
}
}
/**
* @access public
* @method hasDataParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} type
* @param {Boolean} [async=false] - check only for async, or only sync
*
* @return {Boolean} parser exists
*/
function hasDataParser(type, async) {
return async ? asyncParsers[type] || nativeAsyncParsers[type] : parsers[type] || nativeParsers[type];
}
/**
* @access public
* @method removeDataParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} type
* @param {Boolean} [async=false]
*/
function removeDataParser(type, async) {
delete (async ? asyncParsers : parsers)[type];
}
/**
* @access public
* @method listDataParser
* @memberof module:@citation-js/core.plugins.input
*
* @param {Boolean} [async=false]
*/
function listDataParser(async) {
return Object.keys(async ? asyncParsers : parsers);
}
// @ts-nocheck
/**
* @access private
* @type {Object}
*/
const formats$3 = {};
/**
* See the relevant tutorial: {@tutorial input_plugins}
*
* @access public
* @method add
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format - input format name
* @param {module:@citation-js/core.plugins.input~parsers} parsers - parsers
*
* @tutorial input_plugins
*/
function add$5(format, parsers) {
const formatParser = new FormatParser(format, parsers);
formatParser.validate();
const index = formats$3[format] || (formats$3[format] = {});
if (formatParser.typeParser) {
addTypeParser(format, formatParser.typeParser);
index.type = true;
}
if (formatParser.dataParser) {
addDataParser(format, formatParser.dataParser);
index.data = true;
}
if (formatParser.asyncDataParser) {
addDataParser(format, formatParser.asyncDataParser);
index.asyncData = true;
}
if (parsers.outputs) {
index.outputs = parsers.outputs;
}
}
/**
* @access public
* @method get
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format - input format name
* @returns {Object} index
*/
function get$4(format) {
return formats$3[format];
}
/**
* @access public
* @method remove
* @memberof module:@citation-js/core.plugins.input
*
* @param {module:@citation-js/core.plugins.input~format} format - input format name
*/
function remove$4(format) {
const index = formats$3[format];
if (!index) {
return;
}
if (index.type) {
removeTypeParser(format);
}
if (index.data) {
removeDataParser(format);
}
if (index.asyncData) {
removeDataParser(format, true);
}
delete formats$3[format];
}
/**
* @access public
* @method has
* @memberof module:@citation-js/core.plugins.input
* @param {module:@citation-js/core.plugins.input~format} format - input format name
* @returns {Boolean} input format is registered
*/
function has$4(format) {
return format in formats$3;
}
/**
* @access public
* @method list
* @memberof module:@citation-js/core.plugins.input
* @returns {Array} input format is registered
*/
function list$4() {
return Object.keys(formats$3);
}
/**
* @namespace input
* @memberof module:@citation-js/core.plugins
*/
/**
* @namespace util
* @memberof module:@citation-js/core.plugins.input
*/
const util = Object.assign({}, dataType, graph, parser, csl);
var input = {
__proto__: null,
util: util,
add: add$5,
get: get$4,
remove: remove$4,
has: has$4,
list: list$4,
chain: chain,
chainLink: chainLink,
chainAsync: chainAsync,
chainLinkAsync: chainLinkAsync,
type: type,
addTypeParser: addTypeParser,
hasTypeParser: hasTypeParser,
removeTypeParser: removeTypeParser,
listTypeParser: listTypeParser,
treeTypeParser: treeTypeParser,
typeMatcher: typeMatcher,
data: data,
dataAsync: dataAsync,
addDataParser: addDataParser,
hasDataParser: hasDataParser,
removeDataParser: removeDataParser,
listDataParser: listDataParser
};
// @ts-nocheck
/**
* Add an object to the array of objects
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core~InputData} data - The data to add to your object
* @param {module:@citation-js/core~InputOptions} [options] - Options
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated parent object
*/
function add$4(data, options = {}, log = false) {
if (options === true || log === true) {
this.save();
}
this.data.push(...chain(data, options));
this.data.filter(entry => !Object.prototype.hasOwnProperty.call(entry, 'id')).forEach(entry => {
entry.id = fetchId(this.getIds(), 'temp_id_');
});
return this;
}
/**
* Add an object to the array of objects
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core~InputData} data - The data to add to your object
* @param {module:@citation-js/core~InputOptions} [options] - Options
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {Promise} The updated parent object
*/
async function addAsync(data, options = {}, log = false) {
if (options === true || log === true) {
this.save();
}
this.data.push(...(await chainAsync(data, options)));
this.data.filter(entry => !Object.prototype.hasOwnProperty.call(entry, 'id')).forEach(entry => {
entry.id = fetchId(this.getIds(), 'temp_id_');
});
return this;
}
/**
* Recreate a `Cite` object with almost any kind of data, and manipulate it with its default methods.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core~InputData} data - Replacement data
* @param {module:@citation-js/core~InputOptions} [options] - Options
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated parent object
*/
function set(data, options = {}, log = false) {
if (options === true || log === true) {
this.save();
}
this.data = [];
return typeof options !== 'boolean' ? this.add(data, options) : this.add(data);
}
/**
* Recreate a `Cite` object with almost any kind of data, and manipulate it with its default methods.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core~InputData} data - Replacement data
* @param {module:@citation-js/core~InputOptions} [options] - Options
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {Promise} The updated parent object
*/
async function setAsync(data, options = {}, log = false) {
if (options === true || log === true) {
this.save();
}
this.data = [];
return typeof options !== 'boolean' ? this.addAsync(data, options) : this.addAsync(data);
}
/**
* Reset a `Cite` object.
*
* @memberof module:@citation-js/core.Cite#
*
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated, empty parent object (except the log, the log lives)
*/
function reset(log) {
if (log) {
this.save();
}
this.data = [];
this._options = {};
return this;
}
var set$1 = {
__proto__: null,
add: add$4,
addAsync: addAsync,
set: set,
setAsync: setAsync,
reset: reset
};
// @ts-nocheck
/**
* @module output/label
*/
/**
* Get a label from CSL data
*
* @access protected
* @method getLabel
* @todo flavors/formats
*
* @param {CSL} entry - Input CSL
*
* @return {String} The label
*/
function getLabel(entry) {
if ('citation-label' in entry) {
return entry['citation-label'];
}
let res = '';
if (entry.author) {
res += entry.author[0].family || entry.author[0].literal;
}
if (entry.issued && entry.issued['date-parts'] && entry.issued['date-parts'][0]) {
res += entry.issued['date-parts'][0][0];
}
if (entry['year-suffix']) {
res += entry['year-suffix'];
} else if (entry.title) {
res += entry.title.replace(/<\/?.*?>/g, '').match(/^(?:(?:the|a|an)\s+)?(\S+)/i)[1];
}
return res;
}
var label = {
label(data) {
return data.reduce((object, entry) => {
object[entry.id] = getLabel(entry);
return object;
}, {});
}
};
/**
* @callback module:@citation-js/core.Cite#sort~sort
* @param {module:@citation-js/core~CSL} a - element a
* @param {module:@citation-js/core~CSL} b - element b
* @return {Number} positive for a > b, negative for b > a, zero for a = b
*/
/**
* Get value for comparing
*
* @access private
* @method getComparisonValue
*
* @param {module:@citation-js/core~CSL} obj - obj
* @param {String} prop - The prop in question
* @param {Boolean} label - Prop is label
*
* @return {String|Number} something to compare
*/
function getComparisonValue(obj, prop, label = prop === 'label') {
let value = label ? getLabel(obj) : obj[prop];
switch (prop) {
case 'author':
case 'editor':
return value.map(name => name.literal || name.family || format$8(name));
case 'accessed':
case 'issued':
return value['date-parts'][0];
case 'page':
return value.split('-').map(num => parseInt(num));
case 'edition':
case 'issue':
case 'volume':
value = parseInt(value);
return !isNaN(value) ? value : -Infinity;
default:
return value || -Infinity;
}
}
/**
* Compares props
*
* @access private
* @method compareProp
*
* @param {module:@citation-js/core~CSL} entryA
* @param {module:@citation-js/core~CSL} entryB
* @param {String} prop - The prop in question. Prepend ! to sort the other way around.
* @param {Boolean} flip - Override flip
*
* @return {Number} positive for a > b, negative for b > a, zero for a = b (flips if prop has !)
*/
function compareProp(entryA, entryB, prop, flip = /^!/.test(prop)) {
prop = prop.replace(/^!/, '');
const a = getComparisonValue(entryA, prop);
const b = getComparisonValue(entryB, prop);
return (flip ? -1 : 1) * (a > b ? 1 : a < b ? -1 : 0);
}
/**
* Generates a sorting callback based on props.
*
* @access private
* @method getSortCallback
*
* @param {...String} props - How to sort
*
* @return {module:@citation-js/core.Cite#sort~sort} sorting callback
*/
function getSortCallback(...props) {
return (a, b) => {
const keys = props.slice();
let output = 0;
while (!output && keys.length) {
output = compareProp(a, b, keys.shift());
}
return output;
};
}
/**
* Sort the dataset
*
* @memberof module:@citation-js/core.Cite#
*
* @param {module:@citation-js/core.Cite#sort~sort|Array} [method=[]] - How to sort
* @param {Boolean} [log=false] - Show this call in the log
*
* @return {module:@citation-js/core.Cite} The updated parent object
*/
function sort(method = [], log) {
if (log) {
this.save();
}
this.data.sort(typeof method === 'function' ? method : getSortCallback(...method, 'label'));
return this;
}
var sort$1 = {
__proto__: null,
sort: sort
};
// @ts-nocheck
/**
* @callback module:@citation-js/core.plugins.output~formatter
* @param {Array} data
* @return {String} output
*/
/**
* @typedef module:@citation-js/core.plugins.output~formatterName
* @type String
*/
/**
* Validate input arguments
*
* @access private
* @memberof module:@citation-js/core.plugins.output
*
* @param {String} name - output format name
* @param {module:@citation-js/core.plugins.output~formatter} formatter - outputting function
* @throws {TypeError} Invalid output format name
* @throws {TypeError} Invalid formatter
*/
function validate$2(name, formatter) {
if (typeof name !== 'string') {
throw new TypeError(`Invalid output format name, expected string, got ${typeof name}`);
} else if (typeof formatter !== 'function') {
throw new TypeError(`Invalid formatter, expected function, got ${typeof formatter}`);
}
}
/**
* @access public
* @memberof module:@citation-js/core.plugins.output
* @constant register
*
* @type module:@citation-js/core.util.Register
*/
const register$1 = new Register();
/**
* Add output plugin.
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method add
*
* @param {module:@citation-js/core.plugins.output~formatterName} name - output format name
* @param {module:@citation-js/core.plugins.output~formatter} formatter - outputting function
* @throws {TypeError} validation errors
*/
function add$3(name, formatter) {
validate$2(name, formatter);
register$1.set(name, formatter);
}
/**
* Remove output plugin.
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method remove
*
* @param {module:@citation-js/core.plugins.output~formatterName} name - output format name
*/
function remove$3(name) {
register$1.remove(name);
}
/**
* Check if output plugin exists.
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method has
*
* @param {module:@citation-js/core.plugins.output~formatterName} name - output format name
* @return {Boolean} register has plugin
*/
function has$3(name) {
return register$1.has(name);
}
/**
* List output plugins.
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method list
*
* @return {Array} list of plugins
*/
function list$3() {
return register$1.list();
}
/**
* Call output plugin
*
* @access public
* @memberof module:@citation-js/core.plugins.output
* @method format
*
* @param {module:@citation-js/core.plugins.output~formatterName} name - output format name
* @param {Array} data - all entries
* @param {...*} options - output options
*/
function format$7(name, data, ...options) {
if (!register$1.has(name)) {
throw new Error(`Output format "${name}" unavailable`);
}
return register$1.get(name)(data, ...options);
}
var output$2 = {
__proto__: null,
register: register$1,
add: add$3,
remove: remove$3,
has: has$3,
list: list$3,
format: format$7
};
// @ts-nocheck
/**
* Get a list of the data entry IDs, in the order of that list
*
* @access public
* @method getIds
* @memberof module:@citation-js/core.Cite#
*
* @return {Array} List of IDs
*/
function getIds() {
return this.data.map(entry => entry.id);
}
/**
* Get formatted data from your object.
*
* @access public
* @method format
* @memberof module:@citation-js/core.Cite#
*
* @param {String} format - format module name
* @param {...*} options - module options (see relevant documentation)
*
* @return {String|Array} formatted data
*/
function format$6(format, ...options) {
return format$7(format, parseCsl(this.data), ...options);
}
/**
* Get formatted data from your object.
*
* @access public
* @method get
* @memberof module:@citation-js/core.Cite#
* @tutorial output
* @deprecated use {@link module:@citation-js/core.Cite#format}
*
* @param {module:@citation-js/core~OutputOptions} [options={}] - Output options
*
* @return {String|Array} The formatted data
*/
/* istanbul ignore next: deprecated */
function get$2(options = {}) {
validateOutputOptions(options);
const parsedOptions = Object.assign({}, this.defaultOptions, this._options.output, options);
const {
type,
style
} = parsedOptions;
const [styleType, styleFormat] = style.split('-');
const newStyle = styleType === 'citation' ? 'bibliography' : styleType === 'csl' ? 'data' : styleType;
const newType = type === 'string' ? 'text' : type === 'json' ? 'object' : type;
let formatOptions;
switch (newStyle) {
case 'bibliography':
{
const {
lang,
append,
prepend
} = parsedOptions;
formatOptions = {
template: styleFormat,
lang,
format: newType,
append,
prepend
};
break;
}
case 'data':
case 'bibtex':
case 'bibtxt':
case 'ndjson':
case 'ris':
formatOptions = {
type: newType
};
break;
default:
throw new Error(`Invalid style "${newStyle}"`);
}
const result = this.format(newStyle, Object.assign(formatOptions, options._newOptions));
const {
format
} = parsedOptions;
if (format === 'real' && newType === 'html' && typeof document !== 'undefined' && typeof document.createElement === 'function') {
const tmp = document.createElement('div');
tmp.innerHTML = result;
return tmp.firstChild;
} else if (format === 'string' && typeof result === 'object') {
return JSON.stringify(result);
} else {
return result;
}
}
var get$3 = {
__proto__: null,
getIds: getIds,
format: format$6,
get: get$2
};
// @ts-nocheck
/**
* @callback module:@citation-js/core.Cite~asyncCallback
* @param {Cite} data - Cite object
*/
/**
* @access public
* @memberof module:@citation-js/core.Cite
*
* @param {module:@citation-js/core~InputData} data - input data
* @param {module:@citation-js/core~InputOptions} [options={}] - cite options
* @param {module:@citation-js/core.Cite~asyncCallback} [callback] - if not given, function returns promise.
*
* @return {Promise} if callback is omitted, returns a promise
*/
function async(data, options, callback) {
if (typeof options === 'function' && !callback) {
callback = options;
options = undefined;
}
const promise = new this().setAsync(data, options);
if (typeof callback === 'function') {
promise.then(callback);
return undefined;
} else {
return promise;
}
}
var staticMethods = {
__proto__: null,
async: async,
validateOutputOptions: validateOutputOptions,
validateOptions: validateOptions
};
//@ts-nocheck
/**
* Create a `Cite` object with almost any kind of data, and manipulate it with its default methods.
*
* @access public
* @constructor Cite
* @memberof module:@citation-js/core
*
* @param {module:@citation-js/core~InputData} data - Input data
* @param {module:@citation-js/core~InputOptions} [options={}] - Input options
*/
function Cite$1(data, options = {}) {
// Making it Scope-Safe
if (!(this instanceof Cite$1)) {
return new Cite$1(data, options);
}
/**
* The default options for the output. See [input options](../#cite.in.options)
*
* @access protected
* @memberof module:@citation-js/core.Cite#
*
* @var {module:@citation-js/core~InputOptions} _options
*/
this._options = options;
/**
* The saved-images-log
*
* @access protected
* @memberof module:@citation-js/core.Cite#
*
* @var {Array>} log
*/
this.log = [];
/**
* The parsed data
*
* @access protected
* @memberof module:@citation-js/core.Cite#
*
* @var {Array} data
*/
this.data = [];
// Modified citation-js to accept an array of objects
// Use add instead of set to retain previous data
data.forEach(d => {
this.add(d, options);
});
// this.set(data, options)
this.options(options);
return this;
}
Object.assign(Cite$1.prototype, log, options$1, set$1, sort$1, get$3);
Cite$1.prototype[Symbol.iterator] = function* () {
yield* this.data;
};
Object.assign(Cite$1, staticMethods);
// @ts-nocheck
/**
* @typedef module:@citation-js/core.plugins.dict~dictName
* @type String
*/
/**
* @typedef module:@citation-js/core.plugins.dict~dict
* @type Object
*/
/**
* @typedef module:@citation-js/core.plugins.dict~entryName
* @type String
*/
/**
* @typedef module:@citation-js/core.plugins.dict~dictEntry
* @type Array
*/
/**
* Validate input arguments
*
* @access private
* @memberof module:@citation-js/core.plugins.dict
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - output format name
* @param {module:@citation-js/core.plugins.dict~dict} formatter - outputting function
* @throws {TypeError} Invalid output format name
* @throws {TypeError} Invalid formatter
*/
function validate$1(name, dict) {
if (typeof name !== 'string') {
throw new TypeError(`Invalid dict name, expected string, got ${typeof name}`);
} else if (typeof dict !== 'object') {
throw new TypeError(`Invalid dict, expected object, got ${typeof dict}`);
}
for (const entryName in dict) {
const entry = dict[entryName];
if (!Array.isArray(entry) || entry.some(part => typeof part !== 'string')) {
throw new TypeError(`Invalid dict entry "${entryName}", expected array of strings`);
}
}
}
/**
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @constant register
*
* @type module:@citation-js/core.util.Register
*/
const register = new Register({
html: {
bibliographyContainer: ['', '
'],
entry: ['', '
'],
list: [''],
listItem: ['', ' ']
},
text: {
bibliographyContainer: ['', '\n'],
entry: ['', '\n'],
list: ['\n', ''],
listItem: ['\t', '\n']
}
});
/**
* Add dictionary to register. Can be used by output plugins.
*
* @todo docs
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method add
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - dictionary name
* @param {module:@citation-js/core.plugins.dict~dict} dict - dictionary data
* @throws {TypeError} argument validation error
*/
function add$2(name, dict) {
validate$1(name, dict);
register.set(name, dict);
}
/**
* Remove dictionary.
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method remove
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - output format name
*/
function remove$2(name) {
register.remove(name);
}
/**
* Check if dictionary plugin exists.
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method has
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - output format name
* @return {Boolean} register has plugin
*/
function has$2(name) {
return register.has(name);
}
/**
* List dictionary plugins.
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method list
*
* @return {Array} list of plugins
*/
function list$2() {
return register.list();
}
/**
* Get dictionary data.
*
* @access public
* @memberof module:@citation-js/core.plugins.dict
* @method get
*
* @param {module:@citation-js/core.plugins.dict~dictName} name - output format name
* @return {module:@citation-js/core.plugins.dict~dict} dictionary data
*/
function get$1(name) {
if (!register.has(name)) {
throw new Error(`Dict "${name}" unavailable`);
}
return register.get(name);
}
/**
* Object containing HTML strings for building JSON and BibTeX. Made to match citeproc, for compatibility.
*
* @access protected
* @memberof module:@citation-js/core.plugins.dict
* @deprecated use the new formatting dicts: {@link module:@citation-js/core.plugins.dict}
*/
const htmlDict = {
wr_start: '',
wr_end: '
',
en_start: '',
en_end: '
',
ul_start: '',
li_start: '',
li_end: ' '
};
/**
* Object containing text strings for building JSON and BibTeX. Made to match citeproc, for compatibility.
*
* @access protected
* @memberof module:@citation-js/core.plugins.dict
* @deprecated use the new formatting dicts: {@link module:@citation-js/core.plugins.dict}
*/
const textDict = {
wr_start: '',
wr_end: '\n',
en_start: '',
en_end: '\n',
ul_start: '\n',
ul_end: '',
li_start: '\t',
li_end: '\n'
};
var dict = {
__proto__: null,
register: register,
add: add$2,
remove: remove$2,
has: has$2,
list: list$2,
get: get$1,
htmlDict: htmlDict,
textDict: textDict
};
// @ts-nocheck
/**
* @namespace config
* @memberof module:@citation-js/core.plugins
*/
const configs = {};
/**
* @access public
* @method add
* @memberof module:@citation-js/core.plugins.config
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @param {Object} config
*/
function add$1(ref, config) {
configs[ref] = config;
}
/**
* @access public
* @method get
* @memberof module:@citation-js/core.plugins.config
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @return {Object} config
*/
function get(ref) {
return configs[ref];
}
/**
* @access public
* @method has
* @memberof module:@citation-js/core.plugins.config
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @return {Boolean}
*/
function has$1(ref) {
return Object.prototype.hasOwnProperty.call(configs, ref);
}
/**
* @access public
* @method remove
* @memberof module:@citation-js/core.plugins.config
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
*/
function remove$1(ref) {
delete configs[ref];
}
/**
* @access public
* @method list
* @memberof module:@citation-js/core.plugins.config
* @return {Array} list of available plugin configs
*/
function list$1() {
return Object.keys(configs);
}
var config$2 = {
__proto__: null,
add: add$1,
get: get,
has: has$1,
remove: remove$1,
list: list$1
};
// @ts-nocheck
const registers = {
input,
output: output$2,
dict,
config: config$2
};
const indices = {};
/**
* @access public
* @method add
* @memberof module:@citation-js/core.plugins
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @param {module:@citation-js/core.plugins~plugins} [plugins={}]
*/
function add(ref, plugins = {}) {
const mainIndex = indices[ref] = {};
for (const type in plugins) {
if (type === 'config') {
mainIndex.config = {
[ref]: plugins.config
};
registers.config.add(ref, plugins.config);
continue;
}
const typeIndex = mainIndex[type] = {};
const typePlugins = plugins[type];
for (const name in typePlugins) {
const typePlugin = typePlugins[name];
typeIndex[name] = true;
registers[type].add(name, typePlugin);
}
}
}
/**
* @access public
* @method remove
* @memberof module:@citation-js/core.plugins
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
*/
function remove(ref) {
const mainIndex = indices[ref];
for (const type in mainIndex) {
const typeIndex = mainIndex[type];
for (const name in typeIndex) {
registers[type].remove(name);
}
}
delete indices[ref];
}
/**
* @access public
* @method has
* @memberof module:@citation-js/core.plugins
* @param {module:@citation-js/core.plugins~pluginRef} ref - plugin reference/name
* @returns {Boolean} plugin is registered
*/
function has(ref) {
return ref in indices;
}
/**
* @access public
* @method list
* @memberof module:@citation-js/core.plugins
* @returns {Array} list of registered plugins
*/
function list() {
return Object.keys(indices);
}
var plugins = {
__proto__: null,
add: add,
remove: remove,
has: has,
list: list,
input: input,
output: output$2,
dict: dict,
config: config$2
};
function parse$7() {
return [];
}
// @ts-nocheck
/**
*
* @access private
* @constant substituters
* @default
*/
const substituters = [[/((?:\[|:|,)\s*)'((?:\\'|[^'])*?[^\\])?'(?=\s*(?:\]|}|,))/g, '$1"$2"'], [/((?:(?:"|]|}|\/[gmiuys]|\.|(?:\d|\.|-)*\d)\s*,|{)\s*)(?:"([^":\n]+?)"|'([^":\n]+?)'|([^":\n]+?))(\s*):/g, '$1"$2$3$4"$5:']];
/**
* Parse (in)valid JSON
*
* @access protected
* @method parseJSON
*
* @param {String} str - The input string
*
* @return {Object|Array|Array} The parsed object
*/
function parseJSON(str) {
if (typeof str !== 'string') {
return JSON.parse(str);
}
try {
return JSON.parse(str);
} catch (e) {
logger.debug('[plugin-common]', 'Invalid JSON, switching to experimental parser');
substituters.forEach(([regex, subst]) => {
str = str.replace(regex, subst);
});
return JSON.parse(str);
}
}
function parse$6(input) {
return input.val() || input.text() || input.html();
}
function parse$5(input) {
return input.value || input.textContent;
}
// @ts-nocheck
const ref$2 = '@else';
const formats$2 = {
'@empty/text': {
parse: parse$7,
parseType: {
dataType: 'String',
predicate: input => input === ''
}
},
'@empty/whitespace+text': {
parse: parse$7,
parseType: {
dataType: 'String',
predicate: /^\s+$/
}
},
'@empty': {
parse: parse$7,
parseType: {
dataType: 'Primitive',
predicate: input => input == null
}
},
'@else/json': {
parse: parseJSON,
parseType: {
dataType: 'String',
predicate: /^\s*(\{[\S\s]*\}|\[[\S\s]*\])\s*$/
}
},
'@else/url': {
parseType: {
dataType: 'String',
predicate: /^https?:\/\/(([\w-]+\.)*[\w-]+)(:\d+)?(\/[^?/]*)*(\?[^#]*)?(#.*)?$/i
}
},
'@else/jquery': {
parse: parse$6,
parseType: {
dataType: 'ComplexObject',
/* istanbul ignore next: not testable in Node */
predicate(input) {
return typeof jQuery !== 'undefined' && input instanceof jQuery;
}
}
},
'@else/html': {
parse: parse$5,
parseType: {
dataType: 'ComplexObject',
/* istanbul ignore next: not testable in Node */
predicate(input) {
return typeof HTMLElement !== 'undefined' && input instanceof HTMLElement;
}
}
}
};
// @ts-nocheck
/**
* Append commas to every item but the last. Should unfortunately, probably be a utility.
*
* @access private
*
* @param {String} item
* @param {Number} index
* @param {Array} array
*
* @return {String} modified item
*/
function appendCommas(string, index, array) {
return string + (index < array.length - 1 ? ',' : '');
}
/**
* Convert a JSON array or object to HTML.
*
* @access private
*
* @param {Object|Array} src - The data
* @param {Cite.get.dict~dict} dict - Dictionary
*
* @return {String} string form
*/
function getJsonObject(src, dict) {
const isArray = Array.isArray(src);
let entries;
if (isArray) {
entries = src.map(entry => getJsonValue(entry, dict));
} else {
entries = Object.keys(src)
// remove values that cannot be stringified, as is custom
.filter(prop => JSON.stringify(src[prop])).map(prop => `"${prop}": ${getJsonValue(src[prop], dict)}`);
}
entries = entries.map(appendCommas).map(entry => dict.listItem.join(entry));
entries = dict.list.join(entries.join(''));
return isArray ? `[${entries}]` : `{${entries}}`;
}
/**
* Convert JSON to HTML.
*
* @access private
*
* @param {*} src - The data
* @param {Cite.get.dict~dict} dict - Dictionary
*
* @return {String} string form
*/
function getJsonValue(src, dict) {
if (typeof src === 'object' && src !== null) {
if (src.length === 0) {
return '[]';
} else if (Object.keys(src).length === 0) {
return '{}';
} else {
return getJsonObject(src, dict);
}
} else {
return JSON.stringify(src);
}
}
/**
* Get a JSON string from CSL
*
* @access protected
* @method getJson
*
* @param {Array} src - Input CSL
* @param {Cite.get.dict~dict} dict - Dictionary
*
* @return {String} JSON string
*/
function getJson(src, dict) {
let entries = src.map(entry => getJsonObject(entry, dict));
entries = entries.map(appendCommas).map(entry => dict.entry.join(entry));
entries = entries.join('');
return dict.bibliographyContainer.join(`[${entries}]`);
}
var json = {
data(data, {
type,
format = type || 'text',
version = '1.0.2'
} = {}) {
if (version < '1.0.2') {
data = downgradeCsl(data);
}
if (format === 'object') {
return deepCopy(data);
} else if (format === 'text') {
return JSON.stringify(data, null, 2);
} else {
logger.warn('[core]', 'This feature (JSON output with special formatting) is unstable. See https://github.com/larsgw/citation.js/issues/144');
return getJson(data, get$1(format));
}
},
ndjson(data, {
version = '1.0.2'
} = {}) {
if (version < '1.0.2') {
data = downgradeCsl(data);
}
return data.map(entry => JSON.stringify(entry)).join('\n');
}
};
var output$1 = Object.assign({}, json, label);
add(ref$2, {
input: formats$2,
output: output$1
});
// @ts-nocheck
function nameProps(person) {
const {
firstname,
lastname,
firstName: given = firstname,
lastName: family = lastname
} = person;
if (given && family) {
return {
given,
family
};
} else if (person.name) {
return parse$8(person.name);
}
}
const identifiers = ['PMID', 'PMCID', 'DOI', 'ISBN'
// 'URL' is actually the URL of the record collection, if I understand it correctly,
// and not of the record. Otherwise, it should be included.
];
const journalIdentifiers = ['ISSN'];
function idProps(input, identifiers) {
const output = {};
for (const prop in input) {
const upperCaseProp = prop.toUpperCase();
if (identifiers.includes(upperCaseProp)) {
output[upperCaseProp] = input[prop];
}
}
if (input.identifier) {
for (let {
id,
type = ''
} of input.identifier) {
type = type.toUpperCase();
if (identifiers.includes(type)) {
output[type] = id;
}
}
}
return output;
}
// copied from BibTeX, as BibJSON is based on BibTeX
const typeMap = {
article: 'article',
book: 'book',
booklet: 'book',
proceedings: 'book',
mastersthesis: 'thesis',
inbook: 'chapter',
incollection: 'chapter',
conference: 'paper-conference',
inproceedings: 'paper-conference',
manual: 'report',
misc: 'document',
online: 'website',
patent: 'patent',
phdthesis: 'thesis',
techreport: 'report',
unpublished: 'manuscript'
};
function quickscrapeSpecificProps() {
return {
type: 'article-journal'
};
}
function generalProps(input) {
const output = {
type: typeMap[input.type] || 'document',
title: input.title
};
if (input.author) {
output.author = input.author.map(nameProps).filter(Boolean);
}
if (input.editor) {
output.editor = input.editor.map(nameProps).filter(Boolean);
}
if (input.reviewer) {
if (input.author) {
output['reviewed-author'] = output.author;
}
output.author = input.reviewer.map(nameProps).filter(Boolean);
}
/* istanbul ignore next: no examples found */
if (Array.isArray(input.keywords)) {
output.keyword = input.keywords.join();
} else if (input.keywords) {
output.keyword = input.keywords;
}
if (input.publisher) {
output.publisher = input.publisher.name || input.publisher;
}
if (input.date && input.date.published) {
output.issued = parse$9(input.date.published);
} else if (input.year) {
output.issued = {
'date-parts': [[+input.year]]
};
}
if (input.date && input.date.submitted) {
output.submitted = parse$9(input.date.submitted);
}
if (input.journal) {
const journal = input.journal;
if (journal.name) {
output['container-title'] = journal.name;
}
if (journal.volume) {
output.volume = journal.volume;
}
if (journal.issue) {
output.issue = journal.issue;
}
Object.assign(output, idProps(journal, journalIdentifiers));
if (journal.firstpage) {
output['page-first'] = journal.firstpage;
}
/* istanbul ignore else: no examples found */
if (journal.pages) {
output.page = journal.pages.replace('--', '-');
} else if (journal.firstpage && journal.lastpage) {
output.page = journal.firstpage + '-' + journal.lastpage;
}
}
if (input.link && typeof input.link[0] === 'object') {
output.URL = input.link[0].url;
}
Object.assign(output, idProps(input, identifiers));
if (input.cid) {
output.id = input.cid;
} else if (output.DOI) {
output.id = output.DOI;
}
return output;
}
/**
* Parse ContentMine quickscrape data
*
* @access protected
* @memberof module:@citation-js/plugin-bibjson.parsers.json
* @param {Object} data - The input data
* @return {Array} The formatted input data
*/
const parseContentMine = function parseContentMine(data) {
return Object.assign(generalProps(data), quickscrapeSpecificProps());
};
/**
* Parse BibJSON data
*
* @access protected
* @memberof module:@citation-js/plugin-bibjson.parsers.json
* @param {Object} data - The input data
* @return {Array} The formatted input data
*/
const parseBibJson = function parseBibJson(data) {
return generalProps(data);
};
/**
* ## Formats
*
* ### BibJSON
*
* This plugin adds input support for the [BibJSON format](http://okfnlabs.org/bibjson/), with three variants:
*
* * collections, where the records are extracted and parsed
* * records, which are parsed
* * records of the [quickscrape](https://github.com/ContentMine/quickscrape) variant, which are parsed
*
* @module module:@citation-js/plugin-bibjson
*/
const scraperLinks = ['fulltext_html', 'fulltext_xml', 'fulltext_pdf'];
const authorNameFields = ['name', 'lastname', 'lastName', 'firstname', 'firstName'];
/**
* @constant {module:@citation-js/core.plugins~pluginRef} ref
* @memberof module:@citation-js/plugin-bibjson
* @default '@bibjson'
*/
const ref$1 = '@bibjson';
/**
* @namespace formats
* @type module:@citation-js/core.plugins.input~format,module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibjson
*/
const formats$1 = {
/**
* Object with quickscrape-style BibJSON.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibjson.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@bibjson/quickscrape+record+object': {
parse: parseContentMine,
parseType: {
propertyConstraint: {
props: 'link',
value(links) {
return scraperLinks.some(link => links.find(({
type
}) => type === link));
}
},
extends: '@bibjson/record+object'
}
},
/**
* Object with BibJSON.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibjson.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@bibjson/record+object': {
parse: parseBibJson,
parseType: {
dataType: 'SimpleObject',
propertyConstraint: [{
props: 'title'
}, {
props: ['author', 'editor'],
match: 'some',
value(authors) {
return Array.isArray(authors) && authors[0] && authorNameFields.some(field => field in authors[0]);
}
}]
}
},
/**
* Array of {@link module:@citation-js/plugin-bibjson.formats."@bibjson/record+object"|BibJSON objects}.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibjson.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@bibjson/collection+object': {
parse(collection) {
return collection.records;
},
parseType: {
dataType: 'SimpleObject',
propertyConstraint: [{
props: 'metadata',
value(metadata) {
return 'collection' in metadata;
}
}, {
props: 'records',
value(records) {
return Array.isArray(records);
}
}]
}
}
};
add(ref$1, {
input: formats$1
});
var moo = createCommonjsModule(function (module) {
(function (root, factory) {
if (module.exports) {
module.exports = factory();
} else {
root.moo = factory();
}
})(commonjsGlobal, function () {
var hasOwnProperty = Object.prototype.hasOwnProperty;
var toString = Object.prototype.toString;
var hasSticky = typeof new RegExp().sticky === 'boolean';
/***************************************************************************/
function isRegExp(o) {
return o && toString.call(o) === '[object RegExp]';
}
function isObject(o) {
return o && typeof o === 'object' && !isRegExp(o) && !Array.isArray(o);
}
function reEscape(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
function reGroups(s) {
var re = new RegExp('|' + s);
return re.exec('').length - 1;
}
function reCapture(s) {
return '(' + s + ')';
}
function reUnion(regexps) {
if (!regexps.length) return '(?!)';
var source = regexps.map(function (s) {
return "(?:" + s + ")";
}).join('|');
return "(?:" + source + ")";
}
function regexpOrLiteral(obj) {
if (typeof obj === 'string') {
return '(?:' + reEscape(obj) + ')';
} else if (isRegExp(obj)) {
// TODO: consider /u support
if (obj.ignoreCase) throw new Error('RegExp /i flag not allowed');
if (obj.global) throw new Error('RegExp /g flag is implied');
if (obj.sticky) throw new Error('RegExp /y flag is implied');
if (obj.multiline) throw new Error('RegExp /m flag is implied');
return obj.source;
} else {
throw new Error('Not a pattern: ' + obj);
}
}
function pad(s, length) {
if (s.length > length) {
return s;
}
return Array(length - s.length + 1).join(" ") + s;
}
function lastNLines(string, numLines) {
var position = string.length;
var lineBreaks = 0;
while (true) {
var idx = string.lastIndexOf("\n", position - 1);
if (idx === -1) {
break;
} else {
lineBreaks++;
}
position = idx;
if (lineBreaks === numLines) {
break;
}
if (position === 0) {
break;
}
}
var startPosition = lineBreaks < numLines ? 0 : position + 1;
return string.substring(startPosition).split("\n");
}
function objectToRules(object) {
var keys = Object.getOwnPropertyNames(object);
var result = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var thing = object[key];
var rules = [].concat(thing);
if (key === 'include') {
for (var j = 0; j < rules.length; j++) {
result.push({
include: rules[j]
});
}
continue;
}
var match = [];
rules.forEach(function (rule) {
if (isObject(rule)) {
if (match.length) result.push(ruleOptions(key, match));
result.push(ruleOptions(key, rule));
match = [];
} else {
match.push(rule);
}
});
if (match.length) result.push(ruleOptions(key, match));
}
return result;
}
function arrayToRules(array) {
var result = [];
for (var i = 0; i < array.length; i++) {
var obj = array[i];
if (obj.include) {
var include = [].concat(obj.include);
for (var j = 0; j < include.length; j++) {
result.push({
include: include[j]
});
}
continue;
}
if (!obj.type) {
throw new Error('Rule has no type: ' + JSON.stringify(obj));
}
result.push(ruleOptions(obj.type, obj));
}
return result;
}
function ruleOptions(type, obj) {
if (!isObject(obj)) {
obj = {
match: obj
};
}
if (obj.include) {
throw new Error('Matching rules cannot also include states');
}
// nb. error and fallback imply lineBreaks
var options = {
defaultType: type,
lineBreaks: !!obj.error || !!obj.fallback,
pop: false,
next: null,
push: null,
error: false,
fallback: false,
value: null,
type: null,
shouldThrow: false
};
// Avoid Object.assign(), so we support IE9+
for (var key in obj) {
if (hasOwnProperty.call(obj, key)) {
options[key] = obj[key];
}
}
// type transform cannot be a string
if (typeof options.type === 'string' && type !== options.type) {
throw new Error("Type transform cannot be a string (type '" + options.type + "' for token '" + type + "')");
}
// convert to array
var match = options.match;
options.match = Array.isArray(match) ? match : match ? [match] : [];
options.match.sort(function (a, b) {
return isRegExp(a) && isRegExp(b) ? 0 : isRegExp(b) ? -1 : isRegExp(a) ? +1 : b.length - a.length;
});
return options;
}
function toRules(spec) {
return Array.isArray(spec) ? arrayToRules(spec) : objectToRules(spec);
}
var defaultErrorRule = ruleOptions('error', {
lineBreaks: true,
shouldThrow: true
});
function compileRules(rules, hasStates) {
var errorRule = null;
var fast = Object.create(null);
var fastAllowed = true;
var unicodeFlag = null;
var groups = [];
var parts = [];
// If there is a fallback rule, then disable fast matching
for (var i = 0; i < rules.length; i++) {
if (rules[i].fallback) {
fastAllowed = false;
}
}
for (var i = 0; i < rules.length; i++) {
var options = rules[i];
if (options.include) {
// all valid inclusions are removed by states() preprocessor
throw new Error('Inheritance is not allowed in stateless lexers');
}
if (options.error || options.fallback) {
// errorRule can only be set once
if (errorRule) {
if (!options.fallback === !errorRule.fallback) {
throw new Error("Multiple " + (options.fallback ? "fallback" : "error") + " rules not allowed (for token '" + options.defaultType + "')");
} else {
throw new Error("fallback and error are mutually exclusive (for token '" + options.defaultType + "')");
}
}
errorRule = options;
}
var match = options.match.slice();
if (fastAllowed) {
while (match.length && typeof match[0] === 'string' && match[0].length === 1) {
var word = match.shift();
fast[word.charCodeAt(0)] = options;
}
}
// Warn about inappropriate state-switching options
if (options.pop || options.push || options.next) {
if (!hasStates) {
throw new Error("State-switching options are not allowed in stateless lexers (for token '" + options.defaultType + "')");
}
if (options.fallback) {
throw new Error("State-switching options are not allowed on fallback tokens (for token '" + options.defaultType + "')");
}
}
// Only rules with a .match are included in the RegExp
if (match.length === 0) {
continue;
}
fastAllowed = false;
groups.push(options);
// Check unicode flag is used everywhere or nowhere
for (var j = 0; j < match.length; j++) {
var obj = match[j];
if (!isRegExp(obj)) {
continue;
}
if (unicodeFlag === null) {
unicodeFlag = obj.unicode;
} else if (unicodeFlag !== obj.unicode && options.fallback === false) {
throw new Error('If one rule is /u then all must be');
}
}
// convert to RegExp
var pat = reUnion(match.map(regexpOrLiteral));
// validate
var regexp = new RegExp(pat);
if (regexp.test("")) {
throw new Error("RegExp matches empty string: " + regexp);
}
var groupCount = reGroups(pat);
if (groupCount > 0) {
throw new Error("RegExp has capture groups: " + regexp + "\nUse (?: … ) instead");
}
// try and detect rules matching newlines
if (!options.lineBreaks && regexp.test('\n')) {
throw new Error('Rule should declare lineBreaks: ' + regexp);
}
// store regex
parts.push(reCapture(pat));
}
// If there's no fallback rule, use the sticky flag so we only look for
// matches at the current index.
//
// If we don't support the sticky flag, then fake it using an irrefutable
// match (i.e. an empty pattern).
var fallbackRule = errorRule && errorRule.fallback;
var flags = hasSticky && !fallbackRule ? 'ym' : 'gm';
var suffix = hasSticky || fallbackRule ? '' : '|';
if (unicodeFlag === true) flags += "u";
var combined = new RegExp(reUnion(parts) + suffix, flags);
return {
regexp: combined,
groups: groups,
fast: fast,
error: errorRule || defaultErrorRule
};
}
function compile(rules) {
var result = compileRules(toRules(rules));
return new Lexer({
start: result
}, 'start');
}
function checkStateGroup(g, name, map) {
var state = g && (g.push || g.next);
if (state && !map[state]) {
throw new Error("Missing state '" + state + "' (in token '" + g.defaultType + "' of state '" + name + "')");
}
if (g && g.pop && +g.pop !== 1) {
throw new Error("pop must be 1 (in token '" + g.defaultType + "' of state '" + name + "')");
}
}
function compileStates(states, start) {
var all = states.$all ? toRules(states.$all) : [];
delete states.$all;
var keys = Object.getOwnPropertyNames(states);
if (!start) start = keys[0];
var ruleMap = Object.create(null);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
ruleMap[key] = toRules(states[key]).concat(all);
}
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var rules = ruleMap[key];
var included = Object.create(null);
for (var j = 0; j < rules.length; j++) {
var rule = rules[j];
if (!rule.include) continue;
var splice = [j, 1];
if (rule.include !== key && !included[rule.include]) {
included[rule.include] = true;
var newRules = ruleMap[rule.include];
if (!newRules) {
throw new Error("Cannot include nonexistent state '" + rule.include + "' (in state '" + key + "')");
}
for (var k = 0; k < newRules.length; k++) {
var newRule = newRules[k];
if (rules.indexOf(newRule) !== -1) continue;
splice.push(newRule);
}
}
rules.splice.apply(rules, splice);
j--;
}
}
var map = Object.create(null);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
map[key] = compileRules(ruleMap[key], true);
}
for (var i = 0; i < keys.length; i++) {
var name = keys[i];
var state = map[name];
var groups = state.groups;
for (var j = 0; j < groups.length; j++) {
checkStateGroup(groups[j], name, map);
}
var fastKeys = Object.getOwnPropertyNames(state.fast);
for (var j = 0; j < fastKeys.length; j++) {
checkStateGroup(state.fast[fastKeys[j]], name, map);
}
}
return new Lexer(map, start);
}
function keywordTransform(map) {
// Use a JavaScript Map to map keywords to their corresponding token type
// unless Map is unsupported, then fall back to using an Object:
var isMap = typeof Map !== 'undefined';
var reverseMap = isMap ? new Map() : Object.create(null);
var types = Object.getOwnPropertyNames(map);
for (var i = 0; i < types.length; i++) {
var tokenType = types[i];
var item = map[tokenType];
var keywordList = Array.isArray(item) ? item : [item];
keywordList.forEach(function (keyword) {
if (typeof keyword !== 'string') {
throw new Error("keyword must be string (in keyword '" + tokenType + "')");
}
if (isMap) {
reverseMap.set(keyword, tokenType);
} else {
reverseMap[keyword] = tokenType;
}
});
}
return function (k) {
return isMap ? reverseMap.get(k) : reverseMap[k];
};
}
/***************************************************************************/
var Lexer = function (states, state) {
this.startState = state;
this.states = states;
this.buffer = '';
this.stack = [];
this.reset();
};
Lexer.prototype.reset = function (data, info) {
this.buffer = data || '';
this.index = 0;
this.line = info ? info.line : 1;
this.col = info ? info.col : 1;
this.queuedToken = info ? info.queuedToken : null;
this.queuedText = info ? info.queuedText : "";
this.queuedThrow = info ? info.queuedThrow : null;
this.setState(info ? info.state : this.startState);
this.stack = info && info.stack ? info.stack.slice() : [];
return this;
};
Lexer.prototype.save = function () {
return {
line: this.line,
col: this.col,
state: this.state,
stack: this.stack.slice(),
queuedToken: this.queuedToken,
queuedText: this.queuedText,
queuedThrow: this.queuedThrow
};
};
Lexer.prototype.setState = function (state) {
if (!state || this.state === state) return;
this.state = state;
var info = this.states[state];
this.groups = info.groups;
this.error = info.error;
this.re = info.regexp;
this.fast = info.fast;
};
Lexer.prototype.popState = function () {
this.setState(this.stack.pop());
};
Lexer.prototype.pushState = function (state) {
this.stack.push(this.state);
this.setState(state);
};
var eat = hasSticky ? function (re, buffer) {
// assume re is /y
return re.exec(buffer);
} : function (re, buffer) {
// assume re is /g
var match = re.exec(buffer);
// will always match, since we used the |(?:) trick
if (match[0].length === 0) {
return null;
}
return match;
};
Lexer.prototype._getGroup = function (match) {
var groupCount = this.groups.length;
for (var i = 0; i < groupCount; i++) {
if (match[i + 1] !== undefined) {
return this.groups[i];
}
}
throw new Error('Cannot find token type for matched text');
};
function tokenToString() {
return this.value;
}
Lexer.prototype.next = function () {
var index = this.index;
// If a fallback token matched, we don't need to re-run the RegExp
if (this.queuedGroup) {
var token = this._token(this.queuedGroup, this.queuedText, index);
this.queuedGroup = null;
this.queuedText = "";
return token;
}
var buffer = this.buffer;
if (index === buffer.length) {
return; // EOF
}
// Fast matching for single characters
var group = this.fast[buffer.charCodeAt(index)];
if (group) {
return this._token(group, buffer.charAt(index), index);
}
// Execute RegExp
var re = this.re;
re.lastIndex = index;
var match = eat(re, buffer);
// Error tokens match the remaining buffer
var error = this.error;
if (match == null) {
return this._token(error, buffer.slice(index, buffer.length), index);
}
var group = this._getGroup(match);
var text = match[0];
if (error.fallback && match.index !== index) {
this.queuedGroup = group;
this.queuedText = text;
// Fallback tokens contain the unmatched portion of the buffer
return this._token(error, buffer.slice(index, match.index), index);
}
return this._token(group, text, index);
};
Lexer.prototype._token = function (group, text, offset) {
// count line breaks
var lineBreaks = 0;
if (group.lineBreaks) {
var matchNL = /\n/g;
var nl = 1;
if (text === '\n') {
lineBreaks = 1;
} else {
while (matchNL.exec(text)) {
lineBreaks++;
nl = matchNL.lastIndex;
}
}
}
var token = {
type: typeof group.type === 'function' && group.type(text) || group.defaultType,
value: typeof group.value === 'function' ? group.value(text) : text,
text: text,
toString: tokenToString,
offset: offset,
lineBreaks: lineBreaks,
line: this.line,
col: this.col
};
// nb. adding more props to token object will make V8 sad!
var size = text.length;
this.index += size;
this.line += lineBreaks;
if (lineBreaks !== 0) {
this.col = size - nl + 1;
} else {
this.col += size;
}
// throw, if no rule with {error: true}
if (group.shouldThrow) {
var err = new Error(this.formatError(token, "invalid syntax"));
throw err;
}
if (group.pop) this.popState();else if (group.push) this.pushState(group.push);else if (group.next) this.setState(group.next);
return token;
};
if (typeof Symbol !== 'undefined' && Symbol.iterator) {
var LexerIterator = function (lexer) {
this.lexer = lexer;
};
LexerIterator.prototype.next = function () {
var token = this.lexer.next();
return {
value: token,
done: !token
};
};
LexerIterator.prototype[Symbol.iterator] = function () {
return this;
};
Lexer.prototype[Symbol.iterator] = function () {
return new LexerIterator(this);
};
}
Lexer.prototype.formatError = function (token, message) {
if (token == null) {
// An undefined token indicates EOF
var text = this.buffer.slice(this.index);
var token = {
text: text,
offset: this.index,
lineBreaks: text.indexOf('\n') === -1 ? 0 : 1,
line: this.line,
col: this.col
};
}
var numLinesAround = 2;
var firstDisplayedLine = Math.max(token.line - numLinesAround, 1);
var lastDisplayedLine = token.line + numLinesAround;
var lastLineDigits = String(lastDisplayedLine).length;
var displayedLines = lastNLines(this.buffer, this.line - token.line + numLinesAround + 1).slice(0, 5);
var errorLines = [];
errorLines.push(message + " at line " + token.line + " col " + token.col + ":");
errorLines.push("");
for (var i = 0; i < displayedLines.length; i++) {
var line = displayedLines[i];
var lineNo = firstDisplayedLine + i;
errorLines.push(pad(String(lineNo), lastLineDigits) + " " + line);
if (lineNo === token.line) {
errorLines.push(pad("", lastLineDigits + token.col + 1) + "^");
}
}
return errorLines.join("\n");
};
Lexer.prototype.clone = function () {
return new Lexer(this.states, this.state);
};
Lexer.prototype.has = function (tokenType) {
return true;
};
return {
compile: compile,
states: compileStates,
error: Object.freeze({
error: true
}),
fallback: Object.freeze({
fallback: true
}),
keywords: keywordTransform
};
});
});
const required$1 = {
biblatex: {
article: ['author', 'title', 'journaltitle', ['year', 'date']],
book: ['author', 'title', ['year', 'date']],
mvbook: ['author', 'title', ['year', 'date']],
inbook: ['author', 'title', 'booktitle', ['year', 'date']],
booklet: [['author', 'editor'], 'title', ['year', 'date']],
collection: ['editor', 'title', ['year', 'date']],
mvcollection: ['editor', 'title', ['year', 'date']],
incollection: ['author', 'title', 'booktitle', ['year', 'date']],
dataset: [['author', 'editor'], 'title', ['year', 'date']],
online: [['author', 'editor'], 'title', ['year', 'date'], ['doi', 'eprint', 'url']],
patent: ['author', 'title', 'number', ['year', 'date']],
periodical: ['editor', 'title', ['year', 'date']],
proceedings: ['title', ['year', 'date']],
mvproceedings: ['title', ['year', 'date']],
inproceedings: ['author', 'title', 'booktitle', ['year', 'date']],
report: ['author', 'title', 'type', 'institution', ['year', 'date']],
thesis: ['author', 'title', 'type', 'institution', ['year', 'date']],
unpublished: ['author', 'title', ['year', 'date']],
conference: ['author', 'title', 'booktitle', ['year', 'date']],
electronic: [['author', 'editor'], 'title', ['year', 'date'], ['doi', 'eprint', 'url']],
mastersthesis: ['author', 'title', 'institution', ['year', 'date']],
phdthesis: ['author', 'title', 'institution', ['year', 'date']],
techreport: ['author', 'title', 'institution', ['year', 'date']],
www: [['author', 'editor'], 'title', ['year', 'date'], ['doi', 'eprint', 'url']]
},
bibtex: {
article: ['author', 'title', 'journal', 'year'],
book: [['author', 'editor'], 'title', 'publisher', 'year'],
booklet: ['title'],
inbook: [['author', 'editor'], 'title', ['chapter', 'pages'], 'publisher', 'year'],
incollection: ['author', 'title', 'booktitle', 'publisher', 'year'],
inproceedings: ['author', 'title', 'booktitle', 'year'],
mastersthesis: ['author', 'title', 'school', 'year'],
phdthesis: ['author', 'title', 'school', 'year'],
proceedings: ['title', 'year'],
techreport: ['author', 'title', 'institution', 'year'],
unpublished: ['author', 'title', 'note']
}
};
const fieldTypes$1 = {
abstract: ['field', 'literal'],
addendum: ['field', 'literal'],
afterword: ['list', 'name'],
annotation: ['field', 'literal'],
annotator: ['list', 'name'],
author: ['list', 'name'],
authortype: ['field', 'key'],
bookauthor: ['list', 'name'],
bookpagination: ['field', 'key'],
booksubtitle: ['field', 'literal'],
booktitle: ['field', 'title'],
booktitleaddon: ['field', 'literal'],
chapter: ['field', 'literal'],
commentator: ['list', 'name'],
date: ['field', 'date'],
doi: ['field', 'verbatim'],
edition: ['field', 'literal'],
editor: ['list', 'name'],
editora: ['list', 'name'],
editorb: ['list', 'name'],
editorc: ['list', 'name'],
editortype: ['field', 'key'],
editoratype: ['field', 'key'],
editorbtype: ['field', 'key'],
editorctype: ['field', 'key'],
eid: ['field', 'literal'],
entrysubtype: ['field', 'literal'],
eprint: ['field', 'verbatim'],
eprintclass: ['field', 'literal'],
eprinttype: ['field', 'literal'],
eventdate: ['field', 'date'],
eventtitle: ['field', 'title'],
eventtitleaddon: ['field', 'literal'],
file: ['field', 'verbatim'],
foreword: ['list', 'name'],
holder: ['list', 'name'],
howpublished: ['field', 'literal'],
indextitle: ['field', 'literal'],
institution: ['list', 'literal'],
introduction: ['list', 'name'],
isan: ['field', 'literal'],
isbn: ['field', 'literal'],
ismn: ['field', 'literal'],
isrn: ['field', 'literal'],
issn: ['field', 'literal'],
issue: ['field', 'literal'],
issuesubtitle: ['field', 'literal'],
issuetitle: ['field', 'literal'],
iswc: ['field', 'literal'],
journalsubtitle: ['field', 'literal'],
journaltitle: ['field', 'literal'],
label: ['field', 'literal'],
language: ['list', 'key'],
library: ['field', 'literal'],
location: ['list', 'literal'],
mainsubtitle: ['field', 'literal'],
maintitle: ['field', 'title'],
maintitleaddon: ['field', 'literal'],
month: ['field', 'literal'],
nameaddon: ['field', 'literal'],
note: ['field', 'literal'],
number: ['field', 'literal'],
organization: ['list', 'literal'],
origdate: ['field', 'date'],
origlanguage: ['list', 'key'],
origlocation: ['list', 'literal'],
origpublisher: ['list', 'literal'],
origtitle: ['field', 'title'],
pages: ['field', 'range'],
pagetotal: ['field', 'literal'],
pagination: ['field', 'key'],
part: ['field', 'literal'],
publisher: ['list', 'literal'],
pubstate: ['field', 'key'],
reprinttitle: ['field', 'literal'],
series: ['field', 'title'],
shortauthor: ['list', 'name'],
shorteditor: ['list', 'name'],
shorthand: ['field', 'literal'],
shorthandintro: ['field', 'literal'],
shortjournal: ['field', 'literal'],
shortseries: ['field', 'literal'],
shorttitle: ['field', 'title'],
subtitle: ['field', 'literal'],
title: ['field', 'title'],
titleaddon: ['field', 'literal'],
translator: ['list', 'name'],
type: ['field', 'title'],
url: ['field', 'uri'],
urldate: ['field', 'date'],
venue: ['field', 'literal'],
version: ['field', 'literal'],
volume: ['field', 'integer'],
volumes: ['field', 'integer'],
year: ['field', 'literal'],
crossref: ['field', 'entry key'],
entryset: ['separated', 'literal'],
execute: ['field', 'code'],
gender: ['field', 'gender'],
langid: ['field', 'identifier'],
langidopts: ['field', 'literal'],
ids: ['separated', 'entry key'],
indexsorttitle: ['field', 'literal'],
keywords: ['separated', 'literal'],
options: ['separated', 'options'],
presort: ['field', 'string'],
related: ['separated', 'literal'],
relatedoptions: ['separated', 'literal'],
relatedtype: ['field', 'identifier'],
relatedstring: ['field', 'literal'],
sortkey: ['field', 'literal'],
sortname: ['list', 'name'],
sortshorthand: ['field', 'literal'],
sorttitle: ['field', 'literal'],
sortyear: ['field', 'integer'],
xdata: ['separated', 'entry key'],
xref: ['field', 'entry key'],
namea: ['list', 'name'],
nameb: ['list', 'name'],
namec: ['list', 'name'],
nameatype: ['field', 'key'],
namebtype: ['field', 'key'],
namectype: ['field', 'key'],
lista: ['list', 'literal'],
listb: ['list', 'literal'],
listc: ['list', 'literal'],
listd: ['list', 'literal'],
liste: ['list', 'literal'],
listf: ['list', 'literal'],
usera: ['field', 'literal'],
userb: ['field', 'literal'],
userc: ['field', 'literal'],
userd: ['field', 'literal'],
usere: ['field', 'literal'],
userf: ['field', 'literal'],
verba: ['field', 'literal'],
verbb: ['field', 'literal'],
verbc: ['field', 'literal'],
address: ['list', 'literal'],
annote: ['field', 'literal'],
archiveprefix: ['field', 'literal'],
journal: ['field', 'literal'],
key: ['field', 'literal'],
pdf: ['field', 'verbatim'],
primaryclass: ['field', 'literal'],
school: ['list', 'literal'],
numpages: ['field', 'integer'],
pmid: ['field', 'literal'],
pmcid: ['field', 'literal']
};
const unicode$2 = {
diacritics: {
'`': '̀',
"'": '́',
'^': '̂',
'~': '̃',
'=': '̄',
u: '̆',
'.': '̇',
'"': '̈',
r: '̊',
H: '̋',
v: '̌',
b: '̲',
d: '̣',
c: '̧',
k: '̨',
t: '͡',
textcommabelow: '̦'
},
commands: {
textquotesingle: "'",
textasciigrave: '`',
textquotedbl: '"',
textdollar: '$',
textless: '<',
textgreater: '>',
textbackslash: '\\',
textasciicircum: '^',
textunderscore: '_',
textbraceleft: '{',
textbar: '|',
textbraceright: '}',
textasciitilde: '~',
textexclamdown: '¡',
textcent: '¢',
textsterling: '£',
textcurrency: '¤',
textyen: '¥',
textbrokenbar: '¦',
textsection: '§',
textasciidieresis: '¨',
textcopyright: '©',
textordfeminine: 'ª',
guillemetleft: '«',
guillemotleft: '«',
textlnot: '¬',
textregistered: '®',
textasciimacron: '¯',
textdegree: '°',
textpm: '±',
texttwosuperior: '²',
textthreesuperior: '³',
textasciiacute: '´',
textmu: 'µ',
textparagraph: '¶',
textperiodcentered: '·',
textonesuperior: '¹',
textordmasculine: 'º',
guillemetright: '»',
guillemotright: '»',
textonequarter: '¼',
textonehalf: '½',
textthreequarters: '¾',
textquestiondown: '¿',
AE: 'Æ',
DH: 'Ð',
texttimes: '×',
O: 'Ø',
TH: 'Þ',
ss: 'ß',
ae: 'æ',
dh: 'ð',
textdiv: '÷',
o: 'ø',
th: 'þ',
DJ: 'Đ',
dj: 'đ',
i: 'ı',
IJ: 'IJ',
ij: 'ij',
L: 'Ł',
l: 'ł',
NG: 'Ŋ',
ng: 'ŋ',
OE: 'Œ',
oe: 'œ',
textflorin: 'ƒ',
j: 'ȷ',
textasciicaron: 'ˇ',
textasciibreve: '˘',
textacutedbl: '˝',
textgravedbl: '˵',
texttildelow: '˷',
textbaht: '฿',
SS: 'ẞ',
textcompwordmark: '',
textendash: '–',
textemdash: '—',
textbardbl: '‖',
textquoteleft: '‘',
textquoteright: '’',
quotesinglbase: '‚',
textquotedblleft: '“',
textquotedblright: '”',
quotedblbase: '„',
textdagger: '†',
textdaggerdbl: '‡',
textbullet: '•',
textellipsis: '…',
textperthousand: '‰',
textpertenthousand: '‱',
guilsinglleft: '‹',
guilsinglright: '›',
textreferencemark: '※',
textinterrobang: '‽',
textfractionsolidus: '⁄',
textlquill: '⁅',
textrquill: '⁆',
textdiscount: '⁒',
textcolonmonetary: '₡',
textlira: '₤',
textnaira: '₦',
textwon: '₩',
textdong: '₫',
texteuro: '€',
textpeso: '₱',
textcelsius: '℃',
textnumero: '№',
textcircledP: '℗',
textrecipe: '℞',
textservicemark: '℠',
texttrademark: '™',
textohm: 'Ω',
textmho: '℧',
textestimated: '℮',
textleftarrow: '←',
textuparrow: '↑',
textrightarrow: '→',
textdownarrow: '↓',
textminus: '−',
Hwithstroke: 'Ħ',
hwithstroke: 'ħ',
textasteriskcentered: '∗',
textsurd: '√',
textlangle: '〈',
textrangle: '〉',
textblank: '␢',
textvisiblespace: '␣',
textopenbullet: '◦',
textbigcircle: '◯',
textmusicalnote: '♪',
textmarried: '⚭',
textdivorced: '⚮',
textinterrobangdown: '⸘',
textcommabelow: null,
copyright: '©',
Gamma: 'Γ',
Delta: 'Δ',
Theta: 'Θ',
Lambda: 'Λ',
Xi: 'Ξ',
Pi: 'Π',
Sigma: 'Σ',
Phi: 'Φ',
Psi: 'Ψ',
Omega: 'Ω',
alpha: 'α',
beta: 'β',
gamma: 'γ',
delta: 'δ',
varepsilon: 'ε',
zeta: 'ζ',
eta: 'η',
theta: 'θ',
iota: 'ι',
kappa: 'κ',
lambda: 'λ',
mu: 'μ',
nu: 'ν',
xi: 'ξ',
pi: 'π',
rho: 'ρ',
varsigma: 'ς',
sigma: 'σ',
tau: 'τ',
upsilon: 'υ',
varphi: 'φ',
chi: 'χ',
psi: 'ψ',
omega: 'ω',
vartheta: 'ϑ',
Upsilon: 'ϒ',
phi: 'ϕ',
varpi: 'ϖ',
varrho: 'ϱ',
epsilon: 'ϵ'
}
};
const required = required$1;
const fieldTypes = fieldTypes$1;
const diacritics = unicode$2.diacritics;
const commands = unicode$2.commands;
// Adapted from astrocite-bibtex (accessed 2018-02-22)
// https://github.com/dsifford/astrocite/blob/668a9e4/packages/astrocite-bibtex/src/constants.ts#L112-L148
const defaultStrings = {
jan: '01',
feb: '02',
mar: '03',
apr: '04',
may: '05',
jun: '06',
jul: '07',
aug: '08',
sep: '09',
oct: '10',
nov: '11',
dec: '12',
acmcs: 'ACM Computing Surveys',
acta: 'Acta Informatica',
cacm: 'Communications of the ACM',
ibmjrd: 'IBM Journal of Research and Development',
ibmsj: 'IBM Systems Journal',
ieeese: 'IEEE Transactions on Software Engineering',
ieeetc: 'IEEE Transactions on Computers',
ieeetcad: 'IEEE Transactions on Computer-Aided Design of Integrated Circuits',
ipl: 'Information Processing Letters',
jacm: 'Journal of the ACM',
jcss: 'Journal of Computer and System Sciences',
scp: 'Science of Computer Programming',
sicomp: 'SIAM Journal on Computing',
tocs: 'ACM Transactions on Computer Systems',
tods: 'ACM Transactions on Database Systems',
tog: 'ACM Transactions on Graphics',
toms: 'ACM Transactions on Mathematical Software',
toois: 'ACM Transactions on Office Information Systems',
toplas: 'ACM Transactions on Programming Languages and Systems',
tcs: 'Theoretical Computer Science'
};
const formattingEnvs = {
it: 'italics',
itshape: 'italics',
sl: 'italics',
slshape: 'italics',
em: 'italics',
bf: 'bold',
bfseries: 'bold',
sc: 'smallcaps',
scshape: 'smallcaps',
// Font selection
rm: undefined,
sf: undefined,
tt: undefined
};
const formattingCommands = {
textit: 'italics',
textsl: 'italics',
emph: 'italics',
mkbibitalic: 'italics',
mkbibemph: 'italics',
textbf: 'bold',
strong: 'bold',
mkbibbold: 'bold',
textsc: 'smallcaps',
textsuperscript: 'superscript',
textsubscript: 'subscript',
enquote: 'quotes',
mkbibquote: 'quotes',
// Font selection
textmd: undefined,
textrm: undefined,
textsf: undefined,
texttt: undefined,
textup: undefined
};
const formatting = {
italics: ['', ' '],
bold: ['', ' '],
superscript: ['', ' '],
subscript: ['', ' '],
smallcaps: ['', ' '],
nocase: ['', ' '],
quotes: ['\u201C', '\u201D']
};
// Partly adapted from retorquere/bibtex-parser (2020-11-16)
// https://github.com/retorquere/bibtex-parser/blob/7ad73df/index.ts
const argumentCommands = {
ElsevierGlyph(glyph) {
return String.fromCharCode(parseInt(glyph, 16));
},
href(url, text) {
return url;
},
url(url) {
return url;
}
};
const ligaturePattern = /---?|''|``|~/g;
const ligatures = {
'--': '\u2013',
'---': '\u2014',
'``': '\u201C',
"''": '\u201D',
'~': '\u00A0'
};
const mathScriptFormatting = {
'^': 'superscript',
sp: 'superscript',
_: 'subscript',
sb: 'subscript',
mathrm: undefined
};
/* eslint-disable quote-props */
const mathScripts = {
'^': {
0: '\u2070',
1: '\u00B9',
2: '\u00B2',
3: '\u00B3',
4: '\u2074',
5: '\u2075',
6: '\u2076',
7: '\u2077',
8: '\u2078',
9: '\u2079',
'+': '\u207A',
'-': '\u207B',
'=': '\u207C',
'(': '\u207D',
')': '\u207E',
i: '\u2071',
n: '\u207F'
},
_: {
0: '\u2080',
1: '\u2081',
2: '\u2082',
3: '\u2083',
4: '\u2084',
5: '\u2085',
6: '\u2086',
7: '\u2087',
8: '\u2088',
9: '\u2089',
'+': '\u208A',
'-': '\u208B',
'=': '\u208C',
'(': '\u208D',
')': '\u208E',
a: '\u2090',
e: '\u2091',
o: '\u2092',
x: '\u2093',
'\u0259': '\u2094',
h: '\u2095',
k: '\u2096',
l: '\u2097',
m: '\u2098',
n: '\u2099',
s: '\u209A',
p: '\u209B',
t: '\u209C'
}
};
/* eslint-enable quote-props */
// Adapted from retorquere/bibtex-parser (2020-10-15)
// https://github.com/retorquere/bibtex-parser/blob/0c8bd92/index.ts#L416-L441
const sentenceCaseLanguages = ['american', 'british', 'canadian', 'english', 'australian', 'newzealand', 'usenglish', 'ukenglish', 'en', 'eng', 'en-au', 'en-bz', 'en-ca', 'en-cb', 'en-gb', 'en-ie', 'en-jm', 'en-nz', 'en-ph', 'en-tt', 'en-us', 'en-za', 'en-zw', 'anglais'];
var constants = {
__proto__: null,
required: required,
fieldTypes: fieldTypes,
diacritics: diacritics,
commands: commands,
defaultStrings: defaultStrings,
formattingEnvs: formattingEnvs,
formattingCommands: formattingCommands,
formatting: formatting,
argumentCommands: argumentCommands,
ligaturePattern: ligaturePattern,
ligatures: ligatures,
mathScriptFormatting: mathScriptFormatting,
mathScripts: mathScripts,
sentenceCaseLanguages: sentenceCaseLanguages
};
const identifier = /[a-zA-Z_][a-zA-Z0-9_:-]*/;
const whitespace = {
comment: /%.*/,
whitespace: {
match: /\s+/,
lineBreaks: true
}
};
const lexer$1 = moo.states({
main: {
junk: {
match: /@[cC][oO][mM][mM][eE][nN][tT].+|[^@]+/,
lineBreaks: true
},
at: {
match: '@',
push: 'entry'
}
},
entry: _extends({}, whitespace, {
otherEntryType: {
match: /[sS][tT][rR][iI][nN][gG]|[pP][rR][eE][aA][mM][bB][lL][eE]/,
next: 'otherEntryContents'
},
dataEntryType: {
match: identifier,
next: 'dataEntryContents'
}
}),
otherEntryContents: _extends({}, whitespace, {
lbrace: {
match: /[{(]/,
next: 'fields'
}
}),
dataEntryContents: _extends({}, whitespace, {
lbrace: {
match: /[{(]/,
next: 'dataEntryContents'
},
label: /[^,\s]+/,
comma: {
match: ',',
next: 'fields'
}
}),
fields: _extends({}, whitespace, {
identifier,
number: /-?\d+/,
hash: '#',
equals: '=',
comma: ',',
quote: {
match: '"',
push: 'quotedLiteral'
},
lbrace: {
match: '{',
push: 'bracedLiteral'
},
rbrace: {
match: /[})]/,
pop: true
}
}),
quotedLiteral: {
lbrace: {
match: '{',
push: 'bracedLiteral'
},
quote: {
match: '"',
pop: true
},
text: {
match: /(?:\\[\\{]|[^{"])+/,
lineBreaks: true
}
},
bracedLiteral: {
lbrace: {
match: '{',
push: 'bracedLiteral'
},
rbrace: {
match: '}',
pop: true
},
text: {
match: /(?:\\[\\{}]|[^{}])+/,
lineBreaks: true
}
}
});
const delimiters = {
'(': ')',
'{': '}'
};
const bibtexGrammar = new Grammar({
Main() {
const entries = [];
while (true) {
while (this.matchToken('junk')) {
this.consumeToken('junk');
}
if (this.matchEndOfFile()) {
break;
}
entries.push(this.consumeRule('Entry'));
}
return entries.filter(Boolean);
},
_() {
let oldToken;
while (oldToken !== this.token) {
oldToken = this.token;
this.consumeToken('whitespace', true);
this.consumeToken('comment', true);
}
},
Entry() {
this.consumeToken('at');
this.consumeRule('_');
const type = (this.matchToken('otherEntryType') ? this.consumeToken('otherEntryType') : this.consumeToken('dataEntryType')).value.toLowerCase();
this.consumeRule('_');
const openBrace = this.consumeToken('lbrace').value;
this.consumeRule('_');
let result;
if (type === 'string') {
const [key, value] = this.consumeRule('Field');
this.state.strings[key] = value;
} else if (type === 'preamble') {
this.consumeRule('Expression');
} else {
const label = this.consumeToken('label').value;
this.consumeRule('_');
this.consumeToken('comma');
this.consumeRule('_');
const properties = this.consumeRule('EntryBody');
result = {
type,
label,
properties
};
}
this.consumeRule('_');
const closeBrace = this.consumeToken('rbrace').value;
if (closeBrace !== delimiters[openBrace]) {
logger.warn('[plugin-bibtex]', `entry started with "${openBrace}", but ends with "${closeBrace}"`);
}
return result;
},
EntryBody() {
const properties = {};
while (this.matchToken('identifier')) {
const [field, value] = this.consumeRule('Field');
properties[field] = value;
this.consumeRule('_');
if (this.consumeToken('comma', true)) {
this.consumeRule('_');
} else {
break;
}
}
return properties;
},
Field() {
const field = this.consumeToken('identifier').value.toLowerCase();
this.consumeRule('_');
this.consumeToken('equals');
this.consumeRule('_');
const value = this.consumeRule('Expression');
return [field, value];
},
Expression() {
let output = this.consumeRule('ExpressionPart');
this.consumeRule('_');
while (this.matchToken('hash')) {
this.consumeToken('hash');
this.consumeRule('_');
output += this.consumeRule('ExpressionPart').toString();
this.consumeRule('_');
}
return output;
},
ExpressionPart() {
if (this.matchToken('identifier')) {
return this.state.strings[this.consumeToken('identifier').value.toLowerCase()] || '';
} else if (this.matchToken('number')) {
return parseInt(this.consumeToken('number'));
} else if (this.matchToken('quote')) {
return this.consumeRule('QuoteString');
} else {
return this.consumeRule('BracketString');
}
},
QuoteString() {
let output = '';
this.consumeToken('quote');
while (!this.matchToken('quote')) {
output += this.consumeRule('Text');
}
this.consumeToken('quote');
return output;
},
BracketString() {
let output = '';
this.consumeToken('lbrace');
while (!this.matchToken('rbrace')) {
output += this.consumeRule('Text');
}
this.consumeToken('rbrace');
return output;
},
Text() {
if (this.matchToken('lbrace')) {
return `{${this.consumeRule('BracketString')}}`;
} else {
return this.consumeToken('text').value;
}
}
}, {
strings: defaultStrings
});
function parse$4(text) {
return bibtexGrammar.parse(lexer$1.reset(text));
}
/**
* @access private
* @constant bibTxtRegex
* @default
*/
const bibTxtRegex = {
splitEntries: /\n\s*(?=\[)/g,
parseEntry: /^\[(.+?)\]\s*(?:\n([\s\S]+))?$/,
splitPairs: /((?=.)\s)*\n\s*/g,
splitPair: /:(.*)/
};
/**
* Parse single Bib.TXT entry
*
* @access private
* @method parseBibTxtEntry
*
* @param {String} entry - The input data
*
* @return {Object} Array of BibTeX-JSON
*/
const parseBibTxtEntry = entry => {
const [, label, pairs] = entry.match(bibTxtRegex.parseEntry) || [];
if (!label || !pairs) {
return {};
} else {
const out = {
type: 'book',
label,
properties: {}
};
pairs.trim().split(bibTxtRegex.splitPairs).filter(v => v).forEach(pair => {
let [key, value] = pair.split(bibTxtRegex.splitPair);
/* istanbul ignore else */
if (value) {
key = key.trim();
value = value.trim();
if (key === 'type') {
out.type = value;
} else {
out.properties[key] = value;
}
}
});
return out;
}
};
/**
* Parse Bib.TXT data
*
* @access private
* @method parseBibTxt
*
* @param {String} src - The input data
*
* @return {Array} Array of BibTeX-JSON
*/
const parseBibTxt = src => src.trim().split(bibTxtRegex.splitEntries).map(parseBibTxtEntry);
const biblatexTypes = {
source: {
article: 'article-journal',
book: 'book',
mvbook: 'book',
inbook: 'chapter',
bookinbook: 'book',
booklet: 'book',
collection: 'book',
mvcollection: 'book',
incollection: 'chapter',
dataset: 'dataset',
online: 'webpage',
patent: 'patent',
periodical: 'article-journal',
proceedings: 'book',
mvproceedings: 'book',
inproceedings: 'paper-conference',
reference: 'book',
mvreference: 'book',
inreference: 'entry',
report: 'report',
software: 'book',
thesis: 'thesis',
unpublished: 'manuscript',
artwork: 'graphic',
audio: 'song',
image: 'figure',
jurisdiction: 'legal_case',
legislation: 'legislation',
legal: 'treaty',
letter: 'personal_communication',
movie: 'motion_picture',
music: 'musical_score',
review: 'review',
video: 'motion_picture',
conference: 'paper-conference',
electronic: 'webpage',
mastersthesis: 'thesis',
phdthesis: 'thesis',
techreport: 'report',
www: 'webpage'
},
target: {
article: 'article',
'article-journal': 'article',
'article-magazine': 'article',
'article-newspaper': 'article',
bill: 'legislation',
book: 'book',
broadcast: 'audio',
chapter: 'inbook',
dataset: 'dataset',
entry: 'inreference',
'entry-dictionary': 'inreference',
'entry-encyclopedia': 'inreference',
figure: 'artwork',
graphic: 'artwork',
interview: 'audio',
legal_case: 'jurisdiction',
legislation: 'legislation',
manuscript: 'unpublished',
motion_picture: 'movie',
musical_score: 'music',
'paper-conference': 'inproceedings',
patent: 'patent',
personal_communication: 'letter',
post: 'online',
'post-weblog': 'online',
report: 'report',
review: 'review',
'review-book': 'review',
song: 'music',
speech: 'audio',
thesis: 'thesis',
treaty: 'legal',
webpage: 'online'
}
};
const bibtexTypes = {
source: {
article: 'article-journal',
book: 'book',
booklet: 'book',
conference: 'paper-conference',
inbook: 'chapter',
incollection: 'chapter',
inproceedings: 'paper-conference',
mastersthesis: 'thesis',
phdthesis: 'thesis',
proceedings: 'book',
techreport: 'report',
unpublished: 'manuscript'
},
target: {
article: 'article',
'article-journal': 'article',
'article-magazine': 'article',
'article-newspaper': 'article',
book: 'book',
chapter: 'inbook',
manuscript: 'unpublished',
'paper-conference': 'inproceedings',
report: 'techreport',
review: 'article',
'review-book': 'article'
}
};
var config$1 = {
constants,
types: {
biblatex: biblatexTypes,
bibtex: bibtexTypes
},
parse: {
biblatex: true,
strict: false,
sentenceCase: 'never'
},
format: {
useIdAsLabel: false
}
};
//@ts-nocheck
const stopWords = new Set(['the', 'a', 'an']);
const unsafeChars = /(?:<\/?.*?>|[\u0020-\u002F\u003A-\u0040\u005B-\u005E\u0060\u007B-\u007F])+/g;
const unicode$1 = /[^\u0020-\u007F]+/g;
function firstWord(text) {
if (!text) {
return '';
} else {
return text.normalize('NFKD').replace(unicode$1, '').split(unsafeChars).find(word => word.length && !stopWords.has(word.toLowerCase()));
}
}
const name = new Translator([{
source: 'given',
target: 'given'
}, {
source: 'family',
target: 'family'
}, {
source: 'suffix',
target: 'suffix'
}, {
source: 'prefix',
target: 'non-dropping-particle'
}, {
source: 'family',
target: 'literal',
when: {
source: false,
target: {
family: false,
given: false
}
}
}]);
const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
const TYPE = 'BibTeX type';
const LABEL = 'BibTeX label';
const MONTHS = {
jan: 1,
feb: 2,
mar: 3,
apr: 4,
may: 5,
jun: 6,
jul: 7,
aug: 8,
sep: 9,
oct: 10,
nov: 11,
dec: 12,
january: 1,
february: 2,
march: 3,
april: 4,
may: 5,
june: 6,
july: 7,
august: 8,
september: 9,
october: 10,
november: 11,
december: 12
};
const TYPE_KEYS = {
bathesis: "Bachelor's thesis",
mathesis: "Master's thesis",
phdthesis: 'PhD thesis',
candthesis: 'Candidate thesis',
techreport: 'technical report',
resreport: 'research report',
software: 'computer software',
datacd: 'data cd',
audiocd: 'audio cd',
patent: 'patent',
patentde: 'German patent',
patenteu: 'European patent',
patentfr: 'French patent',
patentuk: 'British patent',
patentus: 'U.S. patent',
patreq: 'patent request',
patreqde: 'German patent request',
patreqeu: 'European patent request',
patreqfr: 'French patent request',
patrequk: 'British patent request',
patrequs: 'U.S. patent request'
};
const STANDARD_NUMBERS_PATTERN = /(^(?:ISAN )?(?:[0-9a-f]{4}-){4}[0-9a-z](?:-(?:[0-9a-f]{4}-){2}[0-9a-z])?$)|(^(?:979-?0-?|M-?)(?:\d{9}|(?=[\d-]{11}$)\d+-\d+-\d)$)|(^ISRN .{1,36}$)|(^(?:ISWC )?T-?\d{9}-?\d$)/i;
function parseDate(date) {
const parts = date.split('T')[0].replace(/[?~%]$/, '').split('-');
const year = +parts[0].replace(/^Y(?=-?\d{4}\d+)/, '').replace(/X/g, '0');
const month = +parts[1];
const day = +parts[2];
if (!month || month > 20) {
return [year];
} else if (!day) {
return [year, month];
} else {
return [year, month, day];
}
}
function parseMonth(value) {
if (value == null) {
return [];
}
if (+value) {
return [parseInt(value, 10)];
}
value = value.trim().toLowerCase();
if (value in MONTHS) {
return [MONTHS[value]];
}
const parts = value.split(/\s+/);
let month;
let day;
if (parts[0] in MONTHS) {
month = MONTHS[parts[0]];
day = parseInt(parts[1]);
} else if (parts[1] in MONTHS) {
month = MONTHS[parts[1]];
day = parseInt(parts[0]);
}
return day ? [month, day] : month ? [month] : [];
}
function formatLabel(author, issued, suffix, title) {
let label = '';
if (author && author[0]) {
label += firstWord(author[0].family || author[0].literal);
}
if (issued && issued['date-parts'] && issued['date-parts'][0]) {
label += issued['date-parts'][0][0];
}
if (suffix) {
label += suffix;
} else if (title) {
label += firstWord(title);
}
return label;
}
const Converters = {
PICK: {
toTarget(...args) {
return args.find(Boolean);
},
toSource(value) {
return [value];
}
},
DATE: {
toTarget(date) {
const parts = date.split('/').map(part => part && part !== '..' ? parseDate(part) : undefined);
return isNaN(parts[0][0]) ? {
literal: date
} : {
'date-parts': parts
};
},
toSource(date) {
if ('date-parts' in date) {
return date['date-parts'].map(datePart => datePart.map(datePart => datePart.toString().padStart(2, '0')).join('-')).join('/');
}
}
},
YEAR_MONTH: {
toTarget(year, month, day) {
if (isNaN(+year)) {
return {
literal: year
};
} else if (!isNaN(+day) && !isNaN(+month)) {
return {
'date-parts': [[+year, +month, +day]]
};
} else {
return {
'date-parts': [[+year, ...parseMonth(month)]]
};
}
},
toSource(date) {
if ('date-parts' in date) {
const [year, month, day] = date['date-parts'][0];
return [year.toString(), month ? day ? `${months[month - 1]} ${day}` : month : undefined];
}
}
},
EPRINT: {
toTarget(id, type) {
if (type === 'pubmed') {
return id;
}
},
toSource(id) {
return [id, 'pubmed'];
}
},
HOW_PUBLISHED: {
toTarget(howPublished) {
if (howPublished.startsWith('http')) {
return howPublished;
}
}
},
KEYWORDS: {
toTarget(list) {
return list.join(',');
},
toSource(list) {
return list.split(',');
}
},
LABEL: {
toTarget(label) {
return [label, label];
},
toSource(id, label, author, issued, suffix, title) {
let safeId;
if (id === null) {
safeId = 'null';
} else if (id === undefined) {
safeId = 'undefined';
} else {
safeId = id.toString().replace(unsafeChars, '');
}
if (config$1.format.useIdAsLabel) {
return safeId;
}
if (label && !unsafeChars.test(label)) {
return label;
} else {
return formatLabel(author, issued, suffix, title) || safeId;
}
}
},
NAMES: {
toTarget(list) {
return list.map(name.convertToTarget);
},
toSource(list) {
return list.map(name.convertToSource);
}
},
STANDARD_NUMBERS: {
toTarget(...args) {
return args.find(Boolean);
},
toSource(number) {
const match = number.toString().match(STANDARD_NUMBERS_PATTERN);
return match ? match.slice(1, 5) : [];
}
},
STATUS: {
toSource(state) {
if (/^(inpreparation|submitted|forthcoming|inpress|prepublished)$/i.test(state)) {
return state;
}
}
},
TITLE: {
toTarget(title, subtitle, addon) {
if (subtitle) {
title += ': ' + subtitle;
}
return title;
},
toSource(title) {
return [title];
}
}
};
const nonSpec = [{
source: 'note',
target: 'accessed',
when: {
source: false,
target: {
note: false,
addendum: false
}
},
convert: {
toSource(accessed) {
return `[Online; accessed ${format$9(accessed)}]`;
}
}
}, {
source: 'numpages',
target: 'number-of-pages',
when: {
source: {
pagetotal: false
},
target: false
}
}, {
source: 'pmid',
target: 'PMID',
when: {
source: {
eprinttype(type) {
return type !== 'pmid';
},
archiveprefix(type) {
return type !== 'pmid';
}
},
target: false
}
}, {
source: 'pmcid',
target: 'PMCID',
when: {
target: false
}
}, {
source: 's2id',
target: 'custom',
convert: {
toTarget(S2ID) {
return {
S2ID
};
},
toSource({
S2ID
}) {
return S2ID;
}
}
}];
const aliases = [{
source: 'annote',
target: 'annote',
when: {
source: {
annotation: false
},
target: false
}
}, {
source: 'address',
target: 'publisher-place',
convert: Converters.PICK,
when: {
source: {
location: false
},
target: false
}
}, {
source: ['eprint', 'archiveprefix'],
target: 'PMID',
convert: Converters.EPRINT,
when: {
source: {
eprinttype: false
},
target: false
}
}, {
source: 'journal',
target: 'container-title',
when: {
source: {
maintitle: false,
booktitle: false,
journaltitle: false
},
target: false
}
}, {
source: 'school',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
institution: false,
organization: false,
publisher: false
},
target: false
}
}];
var biblatex = new Translator([...aliases, ...nonSpec, {
source: 'abstract',
target: 'abstract'
}, {
source: 'urldate',
target: 'accessed',
convert: Converters.DATE
}, {
source: 'annotation',
target: 'annote'
}, {
source: 'author',
target: 'author',
convert: Converters.NAMES
}, {
source: 'library',
target: 'call-number'
}, {
source: 'chapter',
target: 'chapter-number'
}, {
source: 'bookauthor',
target: 'container-author',
convert: Converters.NAMES
},
// Regarding maintitle, booktitle & journaltitle:
// When importing, maintitle is preferred, since it represents the
// larger container. When exporting, booktitle is preferred since
// it is more common, unless number-of-volumes is present indicating a
// multi-volume book.
// journaltitle is only used for articles.
{
source: ['maintitle', 'mainsubtitle', 'maintitleaddon'],
target: 'container-title',
when: {
source: true,
target: {
'number-of-volumes': true
}
},
convert: Converters.TITLE
}, {
source: ['booktitle', 'booksubtitle', 'booktitleaddon'],
target: 'container-title',
when: {
source: {
maintitle: false
},
target: {
'number-of-volumes': false,
type(type) {
return !type || !type.startsWith('article');
}
}
},
convert: Converters.TITLE
}, {
source: ['journaltitle', 'journalsubtitle', 'journaltitleaddon'],
target: 'container-title',
when: {
source: {
[TYPE]: 'article'
},
target: {
type: ['article', 'article-newspaper', 'article-journal', 'article-magazine']
}
},
convert: Converters.TITLE
}, {
source: 'shortjournal',
target: 'container-title-short',
when: {
source: {
[TYPE]: 'article'
},
target: {
type: ['article', 'article-newspaper', 'article-journal', 'article-magazine']
}
}
}, {
source: 'shortjournal',
target: 'journalAbbreviation',
when: {
source: false,
target: {
'container-title-short': false
}
}
}, {
source: 'number',
target: 'collection-number',
when: {
source: {
[TYPE]: ['book', 'mvbook', 'inbook', 'bookinbook', 'suppbook', 'collection', 'mvcollection', 'incollection', 'suppcollection', 'manual', 'suppperiodical', 'proceedings', 'mvproceedings', 'refererence']
},
target: {
type: ['bill', 'book', 'broadcast', 'chapter', 'dataset', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'figure', 'graphic', 'interview', 'legislation', 'legal_case', 'manuscript', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'post', 'post-weblog', 'personal_communication', 'review', 'review-book', 'song', 'speech', 'thesis', 'treaty', 'webpage']
}
}
}, {
source: 'series',
target: 'collection-title'
}, {
source: 'shortseries',
target: 'collection-title-short'
}, {
source: 'doi',
target: 'DOI'
}, {
source: 'edition',
target: 'edition'
}, {
source: 'editor',
target: 'editor',
convert: Converters.NAMES
}, {
source: [TYPE, 'entrysubtype', 'type'],
target: ['type', 'genre'],
convert: {
toTarget(type, subtype, typeKey) {
if (!typeKey) {
if (type === 'mastersthesis') {
typeKey = 'mathesis';
}
if (type === 'phdthesis') {
typeKey = 'phdthesis';
}
if (type === 'techreport') {
typeKey = 'techreport';
}
}
return [biblatexTypes.source[type] || 'document', typeKey || subtype];
},
toSource(type, genre) {
const sourceType = biblatexTypes.target[type] || 'misc';
return genre in TYPE_KEYS ? [sourceType, undefined, genre] : [sourceType, genre];
}
}
}, {
source: TYPE,
when: {
target: {
type: false
}
},
convert: {
toSource() {
return 'misc';
}
}
}, {
source: 'eventdate',
target: 'event-date',
convert: Converters.DATE
}, {
source: 'venue',
target: 'event-place'
}, {
source: ['eventtitle', 'eventtitleaddon'],
target: 'event-title',
convert: Converters.EVENT_TITLE
}, {
source: ['eventtitle', 'eventtitleaddon'],
target: 'event',
convert: Converters.EVENT_TITLE,
when: {
source: false,
target: {
'event-title': false
}
}
}, {
source: LABEL,
target: ['id', 'citation-key', 'author', 'issued', 'year-suffix', 'title'],
convert: Converters.LABEL
}, {
source: 'isbn',
target: 'ISBN'
}, {
source: 'issn',
target: 'ISSN'
}, {
source: 'issue',
target: 'issue',
when: {
source: {
number: false,
[TYPE]: ['article', 'periodical']
},
target: {
issue(issue) {
return typeof issue === 'string' && !issue.match(/\d+/);
},
type: ['article', 'article-journal', 'article-newspaper', 'article-magazine', 'periodical']
}
}
}, {
source: 'number',
target: 'issue',
when: {
source: {
[TYPE]: ['article', 'periodical', 'inproceedings']
},
target: {
issue(issue) {
return issue && (typeof issue === 'number' || issue.match(/\d+/));
},
type: ['article', 'article-journal', 'article-newspaper', 'article-magazine', 'paper-conference', 'periodical']
}
}
}, {
source: 'date',
target: 'issued',
convert: Converters.DATE
}, {
source: ['year', 'month', 'day'],
target: 'issued',
convert: Converters.YEAR_MONTH,
when: {
source: {
date: false
},
target: false
}
}, {
source: 'location',
target: 'jurisdiction',
when: {
source: {
type: 'patent'
},
target: {
type: 'patent'
}
}
}, {
source: 'keywords',
target: 'keyword',
convert: Converters.KEYWORDS
}, {
source: 'language',
target: 'language',
convert: Converters.PICK
}, {
source: 'langid',
target: 'language',
when: {
source: {
language: false
},
target: false
}
}, {
source: 'note',
target: 'note'
}, {
source: 'addendum',
target: 'note',
when: {
source: {
note: false
},
target: false
}
}, {
source: 'eid',
target: 'number',
when: {
target: {
type: ['article-journal']
}
}
}, {
source: ['isan', 'ismn', 'isrn', 'iswc'],
target: 'number',
convert: Converters.STANDARD_NUMBERS,
when: {
source: {
[TYPE](type) {
return type !== 'patent';
}
},
target: {
type(type) {
return type !== 'patent';
}
}
}
}, {
source: 'number',
target: 'number',
when: {
source: {
[TYPE]: ['patent', 'report', 'techreport', 'legislation']
},
target: {
type: ['patent', 'report', 'legislation']
}
}
}, {
source: 'origdate',
target: 'original-date',
convert: Converters.DATE
}, {
source: 'origlocation',
target: 'original-publisher-place',
convert: Converters.PICK
}, {
source: 'origpublisher',
target: 'original-publisher',
convert: Converters.PICK
}, {
source: 'origtitle',
target: 'original-title'
}, {
source: 'pages',
target: 'page',
when: {
source: {
bookpagination: [undefined, 'page']
}
},
convert: Converters.PAGES
}, {
source: 'pagetotal',
target: 'number-of-pages'
}, {
source: 'part',
target: 'part-number'
}, {
source: ['eprint', 'eprinttype'],
target: 'PMID',
convert: Converters.EPRINT
}, {
source: 'location',
target: 'publisher-place',
convert: Converters.PICK
}, {
source: 'publisher',
target: 'publisher',
convert: Converters.PICK,
when: {
source: true,
target: {
// All except:
// - thesis, report: institution
// - webpage: organization
type: ['article', 'article-journal', 'article-magazine', 'article-newspaper', 'bill', 'book', 'broadcast', 'chapter', 'classic', 'collection', 'dataset', 'document', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'event', 'figure', 'graphic', 'hearing', 'interview', 'legal_case', 'legislation', 'manuscript', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'paper-conference', 'patent', 'performance', 'periodical', 'personal_communication', 'post', 'post-weblog', 'regulation', 'review', 'review-book', 'software', 'song', 'speech', 'standard', 'treaty']
}
}
}, {
source: 'organization',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
publisher: false
},
target: {
type: 'webpage' // TODO paper-conference?
}
}
}, {
source: 'institution',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
publisher: false,
organization: false
},
target: {
type: ['report', 'thesis']
}
}
}, {
source: 'howpublished',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
howpublished(howPublished) {
return howPublished && !howPublished.startsWith('http');
},
publisher: false,
organization: false,
institution: false
},
target: {
type: 'manuscript'
}
}
}, {
source: ['pages', 'bookpagination'],
target: 'section',
when: {
source: {
bookpagination: 'section'
},
target: {
page: false
}
},
convert: {
toTarget(section) {
return section;
},
toSource(section) {
return [section, 'section'];
}
}
}, {
source: 'pubstate',
target: 'status',
convert: Converters.STATUS
}, {
source: 'shorttitle',
target: 'title-short'
}, {
source: 'shorttitle',
target: 'shortTitle',
when: {
source: false,
target: {
'title-short': false
}
}
}, {
source: ['title', 'subtitle', 'titleaddon'],
target: 'title',
convert: Converters.TITLE
}, {
source: 'translator',
target: 'translator',
convert: Converters.NAMES
}, {
source: 'url',
target: 'URL'
}, {
source: 'howpublished',
target: 'URL',
convert: Converters.HOW_PUBLISHED,
when: {
source: {
url: false
},
target: false
}
}, {
source: 'version',
target: 'version'
}, {
source: 'volume',
target: 'volume'
}, {
source: 'volumes',
target: 'number-of-volumes'
}, {
source: ['issuetitle', 'issuesubtitle', 'issuetitleaddon'],
target: 'volume-title',
convert: Converters.TITLE
}]);
var bibtex = new Translator([{
source: 'note',
target: 'accessed',
when: {
source: false,
target: {
note: false
}
},
convert: {
toSource(accessed) {
return `[Online; accessed ${format$9(accessed)}]`;
}
}
}, {
source: 'annote',
target: 'annote'
}, {
source: 'address',
target: 'publisher-place',
convert: Converters.PICK
}, {
source: 'author',
target: 'author',
convert: Converters.NAMES
}, {
source: 'chapter',
target: 'chapter-number'
}, {
source: 'number',
target: 'collection-number',
when: {
source: {
[TYPE]: ['book', 'mvbook', 'inbook', 'collection', 'mvcollection', 'incollection', 'suppcollection', 'manual', 'suppperiodical', 'proceedings', 'mvproceedings', 'refererence']
},
target: {
type: ['bill', 'book', 'broadcast', 'chapter', 'dataset', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'figure', 'graphic', 'interview', 'legislation', 'legal_case', 'manuscript', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'post', 'post-weblog', 'personal_communication', 'review', 'review-book', 'song', 'speech', 'thesis', 'treaty', 'webpage']
}
}
}, {
source: 'series',
target: 'collection-title'
}, {
source: 'booktitle',
target: 'container-title',
when: {
target: {
type: ['chapter', 'paper-conference']
}
}
}, {
source: 'journal',
target: 'container-title',
when: {
source: {
[TYPE]: 'article'
},
target: {
type: ['article', 'article-newspaper', 'article-journal', 'article-magazine']
}
}
}, {
source: 'edition',
target: 'edition'
}, {
source: 'editor',
target: 'editor',
convert: Converters.NAMES
}, {
source: LABEL,
target: ['id', 'citation-key', 'author', 'issued', 'year-suffix', 'title'],
convert: Converters.LABEL
}, {
source: 'number',
target: 'issue',
when: {
source: {
[TYPE]: ['article', 'periodical', 'inproceedings']
},
target: {
issue(issue) {
return typeof issue === 'number' || typeof issue === 'string' && issue.match(/\d+/);
},
type: ['article', 'article-journal', 'article-newspaper', 'article-magazine', 'paper-conference', 'periodical']
}
}
}, {
source: ['year', 'month', 'day'],
target: 'issued',
convert: Converters.YEAR_MONTH
}, {
source: 'note',
target: 'note'
}, {
source: 'number',
target: 'number',
when: {
source: {
[TYPE]: ['patent', 'report', 'techreport']
},
target: {
type: ['patent', 'report']
}
}
}, {
source: 'pages',
target: 'page',
convert: Converters.PAGES
}, {
source: 'publisher',
target: 'publisher',
convert: Converters.PICK,
when: {
target: {
// All except manuscript, paper-conference, techreport and thesis
type: ['article', 'article-journal', 'article-magazine', 'article-newspaper', 'bill', 'book', 'broadcast', 'chapter', 'classic', 'collection', 'dataset', 'document', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'event', 'figure', 'graphic', 'hearing', 'interview', 'legal_case', 'legislation', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'patent', 'performance', 'periodical', 'personal_communication', 'post', 'post-weblog', 'regulation', 'review', 'review-book', 'software', 'song', 'speech', 'standard', 'treaty', 'webpage']
}
}
}, {
source: 'organization',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
publisher: false
},
target: {
type: 'paper-conference'
}
}
}, {
source: 'institution',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
publisher: false,
organization: false
},
target: {
type: 'report'
}
}
}, {
source: 'school',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
institution: false,
organization: false,
publisher: false
},
target: {
type: 'thesis'
}
}
}, {
source: 'howpublished',
target: 'publisher',
convert: Converters.PICK,
when: {
source: {
howpublished(howPublished) {
return howPublished && !howPublished.startsWith('http');
},
publisher: false,
organization: false,
institution: false,
school: false
},
target: {
type: 'manuscript'
}
}
}, {
source: 'title',
target: 'title'
}, {
source: [TYPE, 'type'],
target: ['type', 'genre'],
convert: {
toTarget(sourceType, subType) {
/* istanbul ignore next */
const type = bibtexTypes.source[sourceType] || 'document';
if (subType) {
return [type, subType];
} else if (sourceType === 'mastersthesis') {
return [type, "Master's thesis"];
} else if (sourceType === 'phdthesis') {
return [type, 'PhD thesis'];
} else {
return [type];
}
},
toSource(targetType, genre) {
const type = bibtexTypes.target[targetType] || 'misc';
if (/^(master'?s|diploma) thesis$/i.test(genre)) {
return ['mastersthesis'];
} else if (/^(phd|doctoral) thesis$/i.test(genre)) {
return ['phdthesis'];
} else {
return [type, genre];
}
}
}
}, {
source: TYPE,
when: {
target: {
type: false
}
},
convert: {
toSource() {
return 'misc';
}
}
}, {
source: 'howpublished',
target: 'URL',
convert: Converters.HOW_PUBLISHED,
when: {
target: {
publisher: false
}
}
}, {
source: 'volume',
target: 'volume'
}]);
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
var target = _objectWithoutPropertiesLoose(source, excluded);
var key, i;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, 'string');
return typeof key === 'symbol' ? key : String(key);
}
function _toPrimitive(input, hint) {
if (typeof input !== 'object' || input === null) return input;
var prim = input[Symbol.toPrimitive];
if (prim !== undefined) {
var res = prim.call(input, hint || 'default');
if (typeof res !== 'object') return res;
throw new TypeError('@@toPrimitive must return a primitive value.');
}
return (hint === 'string' ? String : Number)(input);
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) {
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function crossref(entry, registry) {
if (entry.crossref in registry) {
const parent = registry[entry.crossref].properties;
if (parent === entry) {
return entry;
}
return Object.assign({}, crossref(parent, registry), entry);
}
return entry;
}
function _parse(input, spec) {
const registry = {};
for (const entry of input) {
registry[entry.label] = entry;
}
return input.map(({
type,
label,
properties
}) => spec.convertToTarget(_objectSpread({
[TYPE]: type,
[LABEL]: label
}, crossref(properties, registry))));
}
function _format(input, spec) {
return input.map(entry => {
const _spec$convertToSource = spec.convertToSource(entry),
{
[TYPE]: type,
[LABEL]: label
} = _spec$convertToSource,
properties = _objectWithoutProperties(_spec$convertToSource, [TYPE, LABEL].map(_toPropertyKey));
return {
type,
label,
properties
};
});
}
function parseBibtex$1(input) {
return _parse(input, bibtex);
}
function formatBibtex$1(input) {
return _format(input, bibtex);
}
function parse$3(input) {
return _parse(input, biblatex);
}
function format$5(input) {
return _format(input, biblatex);
}
// @ts-nocheck
/**
* @access private
* @param {String}
* @returns {Boolean|null} true if uppercase, false if lowercase, null if neither
*/
function getStringCase(string) {
const a = string.toUpperCase();
const b = string.toLowerCase();
for (let i = 0; i < string.length; i++) {
if (a[i] !== b[i]) {
return a[i] === string[i];
}
}
return null;
}
/**
* @access private
* @param {Array} parts
* @return {String|undefined}
*/
function formatNameParts(parts) {
if (parts.length === 0) {
return undefined;
}
let piece = '';
while (parts.length > 1) {
const {
value,
hyphenated
} = parts.shift();
piece += value + (hyphenated ? '-' : ' ');
}
const output = piece + parts[0].value;
return output[0] && output;
}
/**
* @access private
* @param {Array} parts
* @param {Boolean} [orderGiven=true] - also consider the given name
* @return {Array}
*/
function orderNameParts(parts, /* istanbul ignore next */orderGiven = true) {
const given = [];
const undecided = [];
if (orderGiven) {
while (parts.length > 1 && parts[0].upperCase !== false) {
given.push(...undecided);
undecided.length = 0;
while (parts.length > 1 && parts[0].upperCase !== false && !parts[0].hyphenated) {
given.push(parts.shift());
}
while (parts.length > 0 && parts[0].upperCase !== false && parts[0].hyphenated) {
undecided.push(parts.shift());
}
}
}
const prefix = [];
const family = [];
while (parts.length > 1) {
prefix.push(...family);
family.length = 0;
while (parts.length > 1 && parts[0].upperCase === false) {
prefix.push(parts.shift());
}
while (parts.length > 0 && parts[0].upperCase !== false) {
family.push(parts.shift());
}
}
if (undecided.length) {
family.unshift(...undecided);
}
if (parts.length) {
family.push(parts[0]);
}
return [formatNameParts(given), formatNameParts(prefix), formatNameParts(family)];
}
/**
* @access private
* @param {Array>} pieces
* @return {Object}
*/
function orderNamePieces(pieces) {
if (pieces[0][0].label) {
const _name = {};
for (const [{
value,
label
}] of pieces) {
_name[label] = value;
}
return _name;
}
const name = {};
const [given, prefix, family] = orderNameParts(pieces[0], pieces.length === 1);
if (family) {
name.family = family;
}
if (prefix) {
name.prefix = prefix;
}
if (pieces.length === 3) {
name.given = formatNameParts(pieces[2]);
name.suffix = formatNameParts(pieces[1]);
} else if (pieces.length === 2) {
name.given = formatNameParts(pieces[1]);
} else if (given) {
name.given = given;
}
return name;
}
const text = {
command: {
match: /\\(?:[a-zA-Z]+|.) */,
type: moo.keywords({
commandBegin: '\\begin',
commandEnd: '\\end'
}),
value: s => s.slice(1).trim()
},
lbrace: {
match: '{',
push: 'bracedLiteral'
},
mathShift: {
match: '$',
push: 'mathLiteral'
},
whitespace: {
match: /[\s]+|~/,
lineBreaks: true,
// \xa0 = Non-breakable space
value(token) {
return token === '~' ? '\xa0' : ' ';
}
}
};
const lexer = moo.states({
stringLiteral: _extends({}, text, {
text: /[^{$}\s~\\]+/
}),
namesLiteral: _extends({
and: /\s+[aA][nN][dD]\s+/,
comma: ',',
hyphen: '-',
equals: '='
}, text, {
text: /[^{$}\s~\\,=-]+/
}),
listLiteral: _extends({
and: /\s+and\s+/
}, text, {
text: /[^{$}\s~\\]+/
}),
separatedLiteral: _extends({
comma: ','
}, text, {
text: /[^{$}\s~\\,]+/
}),
bracedLiteral: _extends({}, text, {
rbrace: {
match: '}',
pop: true
},
text: /[^{$}\s~\\]+/
}),
mathLiteral: _extends({}, text, {
mathShift: {
match: '$',
pop: true
},
script: /[\^_]/,
text: /[^{$}\s~\\^_]+/
})
});
function flattenConsString(string) {
return string;
}
function applyFormatting(text, format) {
if (format in formatting) {
return text && formatting[format].join(text);
} else {
return text;
}
}
const valueGrammar = new Grammar({
String() {
let output = '';
while (!this.matchEndOfFile()) {
output += this.consumeRule('Text');
}
return flattenConsString(output);
},
StringNames() {
const list = [];
while (true) {
this.consumeToken('whitespace', true);
list.push(this.consumeRule('Name'));
this.consumeToken('whitespace', true);
if (this.matchEndOfFile()) {
return list;
} else {
this.consumeToken('and');
}
}
},
Name() {
const pieces = [];
while (true) {
pieces.push(this.consumeRule('NamePiece'));
if (this.matchEndOfFile() || this.matchToken('and')) {
return orderNamePieces(pieces);
} else {
this.consumeToken('comma');
this.consumeToken('whitespace', true);
}
}
},
NamePiece() {
const parts = [];
while (true) {
const part = this.consumeRule('NameToken');
if (part.label) {
part.label = formatNameParts([...parts, {
value: part.label
}]);
return [part];
}
parts.push(part);
if (this.matchEndOfFile() || this.matchToken('and') || this.matchToken('comma')) {
return parts;
} else {
while (this.matchToken('hyphen') || this.matchToken('whitespace')) {
this.consumeToken();
}
}
}
},
NameToken() {
let upperCase = null;
let value = '';
while (true) {
// If needed, test regular text for case
if (upperCase === null && this.matchToken('text')) {
const text = this.consumeToken().value;
value += text;
upperCase = getStringCase(text);
// If end of name part, return up
} else if (this.matchEndOfFile() || this.matchToken('and') || this.matchToken('comma') || this.matchToken('whitespace')) {
return {
value,
upperCase
};
// Same for hyphen, but note it is hyphenated
} else if (this.matchToken('hyphen')) {
return {
value,
upperCase,
hyphenated: true
};
// If equals we are in BibLaTeX extended mode
// 'family=Last, given=First, prefix=von'
} else if (this.matchToken('equals')) {
this.consumeToken('equals');
const text = this.consumeRule('NamePiece');
if (text[0].label) {
value += '=' + text[0].label;
}
return {
value: formatNameParts(text),
label: value
};
// Else consume other text
} else {
value += this.consumeRule('Text');
}
}
},
StringList() {
const list = [];
while (!this.matchEndOfFile()) {
let output = '';
while (!this.matchEndOfFile() && !this.matchToken('and')) {
output += this.consumeRule('Text');
}
list.push(flattenConsString(output));
this.consumeToken('and', true);
}
return list.length === 1 ? list[0] : list;
},
StringSeparated() {
const list = [];
while (!this.matchEndOfFile()) {
let output = '';
while (!this.matchEndOfFile() && !this.matchToken('comma')) {
output += this.consumeRule('Text');
}
list.push(output.trim());
this.consumeToken('comma', true);
this.consumeToken('whitespace', true);
}
return list;
},
StringVerbatim() {
let output = '';
while (!this.matchEndOfFile()) {
output += this.consumeToken().text;
}
return flattenConsString(output);
},
StringUri() {
const uri = this.consumeRule('StringVerbatim');
try {
if (decodeURI(uri) === uri) {
return encodeURI(uri);
} else {
return uri;
}
} catch (e) {
// malformed URI
return encodeURI(uri);
}
},
StringTitleCase() {
this.state.sentenceCase = true;
let output = '';
while (!this.matchEndOfFile()) {
output += this.consumeRule('Text');
}
return flattenConsString(output);
},
BracketString() {
var _this$state;
let output = '';
this.consumeToken('lbrace');
const sentenceCase = this.state.sentenceCase;
// If the bracket string starts with a command the sentence case behavior
// is maintained within the brackets.
this.state.sentenceCase = sentenceCase && this.matchToken('command');
(_this$state = this.state).partlyLowercase && (_this$state.partlyLowercase = this.state.sentenceCase);
while (!this.matchToken('rbrace')) {
output += this.consumeRule('Text');
}
// topLevel meaning that the bracket string is not top level but a direct
// child of the top level value.
const topLevel = sentenceCase && !this.state.sentenceCase;
// Protect the case of the bracket string if it is a direct child of the top
// level, and the string is partly lowercase.
const protectCase = topLevel && this.state.partlyLowercase;
// Restore the sentence case of the outside of the brackets.
this.state.sentenceCase = sentenceCase;
this.consumeToken('rbrace');
return protectCase ? applyFormatting(output, 'nocase') : output;
},
MathString() {
let output = '';
this.consumeToken('mathShift');
while (!this.matchToken('mathShift')) {
if (this.matchToken('script')) {
const script = this.consumeToken('script').value;
const text = this.consumeRule('Text').split('');
if (text.every(char => char in mathScripts[script])) {
output += text.map(char => mathScripts[script][char]).join('');
} else {
const formatName = mathScriptFormatting[script];
output += formatting[formatName].join(text.join(''));
}
continue;
}
if (this.matchToken('command')) {
const command = this.token.value;
if (command in mathScriptFormatting) {
this.consumeToken('command');
const text = this.consumeRule('BracketString');
output += applyFormatting(text, mathScriptFormatting[command]);
continue;
}
}
output += this.consumeRule('Text');
}
this.consumeToken('mathShift');
return output;
},
Text() {
/* eslint-disable padded-blocks */
if (this.matchToken('lbrace')) {
return this.consumeRule('BracketString');
} else if (this.matchToken('mathShift')) {
return this.consumeRule('MathString');
} else if (this.matchToken('whitespace')) {
return this.consumeToken('whitespace').value;
} else if (this.matchToken('commandBegin')) {
return this.consumeRule('EnclosedEnv');
} else if (this.matchToken('command')) {
return this.consumeRule('Command');
}
/* eslint-enable padded-blocks */
const text = this.consumeToken('text').value.replace(ligaturePattern, ligature => ligatures[ligature]);
const afterPunctuation = this.state.afterPunctuation;
this.state.afterPunctuation = /[?!.:]$/.test(text);
// If the text fragment is not topLevel and has a case, check whether lowercase
if (!this.state.sentenceCase) {
var _this$state2;
(_this$state2 = this.state).partlyLowercase || (_this$state2.partlyLowercase = text === text.toLowerCase() && text !== text.toUpperCase());
return text;
}
// Unicode-safe splitting (as in, accounting for surrogate pairs)
const [first, ...otherCharacters] = text;
const rest = otherCharacters.join('');
const restLowerCase = rest.toLowerCase();
// Word case should be preserved for proper nouns (e.g. those with capital
// letters in other places than the first letter).
if (rest !== restLowerCase) {
return text;
}
if (!afterPunctuation) {
return text.toLowerCase();
}
return first + restLowerCase;
// return first.toUpperCase() + restLowerCase
},
Command() {
const commandToken = this.consumeToken('command');
const command = commandToken.value;
// formatting envs
if (command in formattingEnvs) {
const text = this.consumeRule('Env');
const format = formattingEnvs[command];
return applyFormatting(text, format);
// formatting commands
} else if (command in formattingCommands) {
const text = this.consumeRule('BracketString');
const format = formattingCommands[command];
return applyFormatting(text, format);
// commands
} else if (command in commands) {
return commands[command];
// diacritics
} else if (command in diacritics && !this.matchEndOfFile()) {
const text = this.consumeRule('Text');
const diacritic = text[0] + diacritics[command];
return diacritic.normalize('NFC') + text.slice(1);
// argument commands
} else if (command in argumentCommands) {
const func = argumentCommands[command];
const args = [];
let arity = func.length;
while (arity-- > 0) {
this.consumeToken('whitespace', true);
args.push(this.consumeRule('BracketString'));
}
return func(...args);
// escapes
} else if (/^[&%$#_{}]$/.test(command)) {
return commandToken.text.slice(1);
// unknown commands
} else {
return commandToken.text;
}
},
Env() {
let output = '';
while (!this.matchEndOfFile() && !this.matchToken('rbrace')) {
output += this.consumeRule('Text');
}
return output;
},
EnclosedEnv() {
this.consumeToken('commandBegin');
const beginEnv = this.consumeRule('BracketString');
let output = '';
while (!this.matchToken('commandEnd')) {
output += this.consumeRule('Text');
}
const end = this.consumeToken('commandEnd');
const endEnv = this.consumeRule('BracketString');
if (beginEnv !== endEnv) {
throw new SyntaxError(this.lexer.formatError(end, `environment started with "${beginEnv}", ended with "${endEnv}"`));
}
return applyFormatting(output, formattingEnvs[beginEnv]);
}
}, {
sentenceCase: false,
partlyLowercase: false,
afterPunctuation: true
});
function singleLanguageIsEnglish(language) {
return sentenceCaseLanguages.includes(language.toLowerCase());
}
function isEnglish(languages) {
if (Array.isArray(languages)) {
return languages.every(singleLanguageIsEnglish);
}
return singleLanguageIsEnglish(languages);
}
function getMainRule(fieldType, languages) {
if (fieldType[1] === 'name') {
/* istanbul ignore next: does not exist */
return fieldType[0] === 'list' ? 'StringNames' : 'Name';
}
if (fieldType[1] === 'title') {
const option = config$1.parse.sentenceCase;
if (option === 'always' || option === 'english' && isEnglish(languages)) {
return 'StringTitleCase';
} else {
return 'String';
}
}
switch (fieldType[0] === 'field' ? fieldType[1] : fieldType[0]) {
case 'list':
return 'StringList';
case 'separated':
return 'StringSeparated';
case 'verbatim':
return 'StringVerbatim';
case 'uri':
return 'StringUri';
case 'title':
case 'literal':
default:
return 'String';
}
}
function getLexerState(fieldType) {
if (fieldType[1] === 'name') {
return 'namesLiteral';
}
switch (fieldType[0]) {
case 'list':
return 'listLiteral';
case 'separated':
return 'separatedLiteral';
case 'field':
default:
return 'stringLiteral';
}
}
function parse$2(text, field, languages = []) {
const fieldType = fieldTypes[field] || [];
return valueGrammar.parse(lexer.reset(text, {
state: getLexerState(fieldType),
line: 0,
col: 0
}), getMainRule(fieldType, languages));
}
function validate(entries, requirements) {
const problems = [];
for (const {
type,
label,
properties
} of entries) {
if (type in requirements) {
const missing = [];
for (const field of requirements[type]) {
if (Array.isArray(field) && !field.some(field => field in properties)) {
missing.push(field.join('/'));
} else if (typeof field === 'string' && !(field in properties)) {
missing.push(field);
}
}
if (missing.length) {
problems.push([label, `missing fields: ${missing.join(', ')}`]);
}
} else {
problems.push([label, `invalid type: "${type}"`]);
}
}
if (problems.length) {
throw new RangeError(['Invalid entries:'].concat(problems.map(([label, problem]) => ` - ${label} has ${problem}`)).join('\n'));
}
}
function parseEntryValues(entry) {
const output = {};
if ('language' in entry.properties) {
output.language = parse$2(entry.properties.language, 'language');
}
for (const property in entry.properties) {
const value = entry.properties[property];
if (value === '') {
continue;
}
output[property] = parse$2(value + '', property, output.language);
}
return _extends({}, entry, {
properties: output
});
}
function parse$1(entries) {
if (config$1.parse.strict) {
validate(entries, required.biblatex);
}
return parse$3(entries.map(parseEntryValues));
}
function parseBibtex(entries) {
if (config$1.parse.strict) {
validate(entries, required.bibtex);
}
return parseBibtex$1(entries.map(parseEntryValues));
}
/**
* @constant {module:@citation-js/core.plugins~pluginRef} ref
* @memberof module:@citation-js/plugin-bibtex
* @default '@bibtex'
*/
const ref = '@bibtex';
/**
* @namespace formats
* @type module:@citation-js/core.plugins.input~format,module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex
*/
const formats = {
/**
* BibLaTeX file.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@biblatex/text': {
parse: parse$4,
parseType: {
dataType: 'String',
predicate: /@\s{0,5}[A-Za-z]{1,13}\s{0,5}\{\s{0,5}[^@{}"=,\\\s]{0,100}\s{0,5},[\s\S]*\}/
}
},
/**
* BibLaTeX object.
*
* ```js
* {
* type: '...',
* label: '...',
* properties: {...}
* }
* ```
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@biblatex/entry+object': {
parse(input) {
return parse$1([input]);
},
parseType: {
dataType: 'SimpleObject',
propertyConstraint: {
props: ['type', 'label', 'properties']
}
}
},
/**
* Array of {@link module:@citation-js/plugin-bibtex.formats."@biblatex/entries+list"|BibLaTeX objects}.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@biblatex/entries+list': {
parse: parse$1,
parseType: {
elementConstraint: '@biblatex/entry+object'
}
},
/**
* BibTeX file.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~format} outputs
*/
'@bibtex/text': {
parse: parse$4,
outputs: '@bibtex/entries+list'
},
/**
* BibTeX object.
*
* ```js
* {
* type: '...',
* label: '...',
* properties: {...}
* }
* ```
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
*/
'@bibtex/entry+object': {
parse(input) {
return parseBibtex([input]);
}
},
/**
* Array of {@link module:@citation-js/plugin-bibtex.formats."@bibtex/entries+list"|BibTeX objects}.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
*/
'@bibtex/entries+list': {
parse: parseBibtex
},
/**
* Bib.TXT file.
*
* @type module:@citation-js/core.plugins.input~parsers
* @memberof module:@citation-js/plugin-bibtex.formats
* @property {module:@citation-js/core.plugins.input~dataParser} parse
* @property {module:@citation-js/core.plugins.input~typeParser} parseType
*/
'@bibtxt/text': {
parse: parseBibTxt,
parseType: {
dataType: 'String',
predicate: /^\s*(\[(?!\s*[{[]).*?\]\s*(\n\s*[^[]((?!:)\S)+\s*:\s*.+?\s*)*\s*)+$/
}
}
};
//@ts-nocheck
const unicode = {};
for (const command in commands) {
unicode[commands[command]] = command;
}
for (const diacritic in diacritics) {
unicode[diacritics[diacritic]] = diacritic;
}
for (const ligature in ligatures) {
unicode[ligatures[ligature]] = ligature;
}
const UNSAFE_UNICODE = /[^a-zA-Z0-9\s!"#%&'()*+,\-./:;=?@[\]{}\u0300-\u0308\u030a-\u030c\u0332\u0323\u0327\u0328\u0361\u0326]/g;
const DIACRITIC_PATTERN = /.[\u0300-\u0308\u030a-\u030c\u0332\u0323\u0327\u0328\u0361\u0326]+/g;
const listDelimiters = {
separated: ',',
list: ' and '
};
const richTextMappings = {
i: '\\textit{',
b: '\\textbf{',
sc: '\\textsc{',
sup: '\\textsuperscript{',
sub: '\\textsubscript{',
'span style="font-variant:small-caps;"': '\\textsc{',
'span class="nocase"': '{'
};
function escapeValue(value) {
return value.normalize('NFKD').replace(UNSAFE_UNICODE, char => char in unicode ? unicode[char] in ligatures ? unicode[char] : `\\${unicode[char]}{}` : '').replace(DIACRITIC_PATTERN, match => Array.from(match).reduce((subject, diacritic) => `{\\${unicode[diacritic]} ${subject}}`));
}
function formatRichText(value) {
const closingTags = [];
let tokens = value.split(/<(\/?(?:i|b|sc|sup|sub|span)|span .*?)>/g);
tokens = tokens.map((token, index) => {
if (index % 2 === 0) {
return escapeValue(token);
} else if (token in richTextMappings) {
closingTags.push('/' + token.split(' ')[0]);
return richTextMappings[token];
} else if (token === closingTags[closingTags.length - 1]) {
closingTags.pop();
return '}';
} else {
return '';
}
});
return tokens.join('');
}
function formatName(name) {
if (name.family && !name.prefix && !name.given & !name.suffix) {
return name.family.includes(listDelimiters.list) ? name.family : `{${name.family}}`;
}
const parts = [''];
if (name.prefix && name.family) {
parts[0] += name.prefix + ' ';
}
if (name.family) {
parts[0] += name.family;
}
if (name.suffix) {
parts.push(name.suffix);
parts.push(name.given || '');
} else {
parts.push(name.given);
}
return escapeValue(parts.join(', ').trim());
}
function formatTitle(title) {
return formatRichText(title).split(/(:\s*)/).map((part, i) => i % 2 ? part : part.replace(/(?!^)\b[a-z]*[A-Z].*?\b/g, '{$&}')).join('');
}
function formatSingleValue(value, valueType) {
switch (valueType) {
case 'title':
return formatTitle(value);
case 'literal':
return formatRichText(value.toString());
case 'name':
return formatName(value);
case 'verbatim':
case 'uri':
return value.toString();
default:
return escapeValue(value.toString());
}
}
function formatList(values, valueType, listType) {
const delimiter = listDelimiters[listType];
return values.map(value => {
const formatted = formatSingleValue(value, valueType);
return formatted.includes(delimiter) ? `{${formatted}}` : formatted;
}).join(delimiter);
}
function format$4(field, value) {
if (!(field in fieldTypes)) {
return formatSingleValue(value, 'verbatim');
}
const [listType, valueType] = fieldTypes[field];
if (listType in listDelimiters) {
return formatList(value, valueType, listType);
} else {
return formatSingleValue(value, valueType);
}
}
function formatEntryValues({
type,
label,
properties
}) {
const output = {};
for (const property in properties) {
const value = properties[property];
output[property] = format$4(property, value);
}
return {
type,
label,
properties: output
};
}
function format$3(entries) {
return format$5(entries).map(formatEntryValues);
}
function formatBibtex(entries) {
return formatBibtex$1(entries).map(formatEntryValues);
}
function formatEntry$1({
type,
label,
properties
}, dict) {
const fields = Object.entries(properties).map(([field, value]) => dict.listItem.join(`${field} = {${value}},`));
return dict.entry.join(`@${type}{${label},${dict.list.join(fields.join(''))}}`);
}
function format$2(src, dict) {
const entries = src.map(entry => formatEntry$1(entry, dict)).join('');
return dict.bibliographyContainer.join(entries);
}
function formatEntry({
type,
label,
properties
}, dict) {
const fields = Object.entries(properties).concat([['type', type]]).map(([field, value]) => dict.listItem.join(`${field}: ${value}`));
return dict.entry.join(`[${label}]${dict.list.join(fields.join(''))}`);
}
function format$1(src, dict) {
const entries = src.map(entry => formatEntry(entry, dict)).join('\n');
return dict.bibliographyContainer.join(entries);
}
const factory = function factory(mapper, formatter) {
return function (data, opts = {}) {
const {
type,
format = type || 'text'
} = opts;
data = mapper(data);
if (format === 'object') {
return data;
} else if (has$2(format)) {
return formatter(data, get$1(format), opts);
} else {
throw new RangeError(`Output dictionary "${format}" not available`);
}
};
};
var output = {
bibtex: factory(formatBibtex, format$2),
biblatex: factory(format$3, format$2),
bibtxt: factory(formatBibtex, format$1)
};
add(ref, {
input: formats,
output,
config: config$1
});
const defaultLocales = {
'en-US': `Andrew Dunning Sebastian Karcher Rintze M. Zelle Denis Meier Brenton M. Wiernik This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License 2015-10-10T23:31:02+00:00 advance online publication album audio recording film henceforth loc. cit. no place n.p. no publisher n.p. on op. cit. original work published personal communication podcast podcast episode preprint radio broadcast radio series radio series episode special issue special section television broadcast television series television series episode video working paper accessed and and others anonymous anon. at available at by circa c. cited edition editions ed. et al. forthcoming from ibid. in in press internet interview letter no date n.d. online presented at the reference references ref. refs. retrieved scale version preprint journal article magazine article newspaper article bill book broadcast book chapter classic collection dataset document entry dictionary entry encyclopedia entry event graphic hearing interview legal case legislation manuscript map video recording musical score pamphlet conference paper patent performance periodical personal communication post blog post regulation report review book review software audio recording presentation standard thesis treaty webpage journal art. mag. art. newspaper art. bk. bk. chap. doc. graph. interv. MS video rec. rep. rev. bk. rev. audio rec. AD BC BCE CE “ ” ‘ ’ – : , ; th st nd rd th th th first second third fourth fifth sixth seventh eighth ninth tenth act acts appendix appendices article articles canon canons location locations equation equations rule rules scene scenes table tables title titles book books chapter chapters column columns figure figures folio folios number numbers line lines note notes opus opera page pages page pages paragraph paragraphs part parts section sections sub verbo sub verbis verse verses volume volumes app. apps. art. arts. loc. locs. eq. eqs. r. rr. sc. scs. tbl. tbls. tit. tits. bk. bks. chap. chaps. col. cols. fig. figs. fol. fols. no. nos. l. ll. n. nn. op. opp. p. pp. p. pp. para. paras. pt. pts. sec. secs. s.v. s.vv. v. vv. vol. vols. ¶ ¶¶ § §§ chair chairs compiler compilers contributor contributors curator curators executive producer executive producers guest guests host hosts narrator narrators organizer organizers performer performers producer producers writer writers series creator series creators director directors editor editors editor editors illustrator illustrators translator translators editor & translator editors & translators comp. comps. contrib. contribs. cur. curs. exec. prod. exec. prods. narr. narrs. org. orgs. perf. perfs. prod. prods. writ. writs. cre. cres. dir. dirs. ed. eds. ed. eds. ill. ills. tran. trans. ed. & tran. eds. & trans. chaired by compiled by with curated by executive produced by with guest hosted by narrated by organized by performed by produced by written by created by by directed by edited by edited by illustrated by interview by to by translated by edited & translated by comp. by w. cur. by exec. prod. by w. guest hosted by narr. by org. by perf. by prod. by writ. by cre. by dir. by ed. by ed. by illus. by trans. by ed. & trans. by January February March April May June July August September October November December Jan. Feb. Mar. Apr. May Jun. Jul. Aug. Sep. Oct. Nov. Dec. Spring Summer Autumn Winter `
};
const locales = new Register(defaultLocales);
const defaultTemplates = {
apa: ``
};
const templates = new Register(defaultTemplates);
// @ts-nocheck
// BEGIN add sys function
const proxied = Symbol.for('proxied');
const getWrapperProxy = function getWrapperProxy(original) {
const proxy = function proxy(state, entry) {
if (state.sys.wrapBibliographyEntry) {
const [prefix, postfix] = state.sys.wrapBibliographyEntry(this.system_id);
entry = [prefix, entry, postfix].join('');
}
return original.call(this, state, entry);
};
proxy[proxied] = true;
return proxy;
};
for (const format in CSL.Output.Formats) {
const original = CSL.Output.Formats[format]['@bibliography/entry'];
/* istanbul ignore if: currently unreachable */
if (!original || original[proxied]) {
continue;
}
CSL.Output.Formats[format]['@bibliography/entry'] = getWrapperProxy(original);
}
// END
/**
* @access private
* @param {String} locale - locale code
* @return {String} locale XML
*/
function retrieveLocale(locale) {
if (locales.has(locale)) {
return locales.get(locale);
}
const unnormalised = locale.replace('-', '_');
if (locales.has(unnormalised)) {
return locales.get(unnormalised);
}
// Should only occur when a cs:style default-locale is unknown
return {};
}
/**
* Object containing CSL Engines
*
* @access private
* @constant
*/
const engines = {};
/**
* Retrieve CSL parsing engine
*
* @access private
*
* @param {String} style - CSL style id
* @param {String} lang - Language code
* @param {String} template - CSL XML template
* @param {module:output/csl~retrieveItem} retrieveItem - Code to retreive item
* @param {module:output/csl~retrieveLocale} retrieveLocale - Code to retreive locale
*
* @return {Object} CSL Engine
*/
const fetchEngine = function fetchEngine(style, locale, styleXml, retrieveItem, retrieveLocale) {
const engineHash = `${style}|${locale}`;
let engine;
if (engines[engineHash] instanceof CSL.Engine) {
engine = engines[engineHash];
engine.sys.retrieveItem = retrieveItem;
engine.sys.wrapBibliographyEntry = undefined;
engine.updateItems([]);
} else {
engine = engines[engineHash] = new CSL.Engine({
retrieveLocale,
retrieveItem
}, styleXml, locale, true);
}
return engine;
};
/**
* Prepare CSL parsing engine
*
* @access private
*
* @param {Array} data
* @param {String} templateName
* @param {String} language
* @param {String} format
*
* @return {Object} CSL Engine
*/
const prepareEngine = function prepareEngine(data, style, locale, format) {
if (!CSL.Output.Formats[format] || !CSL.Output.Formats[format]['@bibliography/entry']) {
throw new TypeError(`Cannot find format '${format}'`);
}
const items = data.reduce((store, entry) => {
store[entry.id] = entry;
return store;
}, {});
const template = templates.get(templates.has(style) ? style : 'apa');
locale = locales.has(locale) ? locale : undefined;
const callback = function callback(key) {
if (Object.prototype.hasOwnProperty.call(items, key)) {
return items[key];
} else {
throw new Error(`Cannot find entry with id '${key}'`);
}
};
const engine = fetchEngine(style, locale, template, callback, retrieveLocale);
engine.setOutputFormat(format);
return engine;
};
/**
* Add data-* attribute to a HTML string
*
* @access private
*
* @param {String} string - HTML string
* @param {String} name - attribute name
* @param {String} value - attribute value
*
* @return {String} HTML string with attribute
*/
const getAttributedEntry = (string, name, value) => string.replace(/^\s*<[a-z]+/i, `$& data-${name}="${value}"`);
/**
* Add CSL identifiers to entry
*
* @access private
*
* @param {String} value - HTML string
* @param {String} id - ID
*
* @return {String} HTML string with CSL ID
*/
const getPrefixedEntry = (value, id) => getAttributedEntry(value, 'csl-entry-id', id);
// @ts-nocheck
/**
* Get a rendered affix
*
* @access private
*
* @param {CSL} source - source element
* @param {String|Cite~wrapper} affix
*
* @return {String} Rendered affixs
*/
const getAffix = (source, affix) => typeof affix === 'function' ? affix(source) : affix || '';
/**
* This plugin adds the output format `bibliography`, and accepts the following specific options:
*
* * `prepend` (`String`, `Function`): prepend static or dynamic text to each entry
* * `append` (`String`, `Function`): append static or dynamic text to each entry
* * `nosort` (`Boolean`, default: `false`): do not sort according to the style-defined rules
* * `asEntryArray` (`Boolean`, default: `false`): return an array of entries consisting of an id and the output for that individual entry
*
* Here's an example for `prepend` and `append`:
*
* ```js
* let cite = new Cite({ id: 'a', title: 'Item A' })
*
* cite.format('bibliography', { append: ' [foobar]' })
* // 'Item A. (n.d.). [foobar]\n'
*
* cite.format('bibliography', { prepend (entry) { return `${entry.id}: ` } })
* // 'a: Item A. (n.d.).\n'
* ```
*
* And here's another example, possibly more realistic:
*
* ```js
* let cite = new Cite('Q30000000')
*
* let date = (new Date()).toLocaleDateString()
*
* cite.format('bibliography', {
* format: 'html',
* template: 'apa',
* prepend (entry) {
* return `[${entry.id}]: `
* },
* append: ` [Retrieved on ${date}]`
* })
*
* // `
* //
* // [Q30000000]: Miccadei, S., De Leo, R., Zammarchi, E., Natali, P. G., & Civitareale, D. (2002). The Synergistic Activity of Thyroid Transcription Factor 1 and Pax 8 Relies on the Promoter/Enhancer Interplay. Molecular Endocrinology , 16 (4), 837–846. https://doi.org/10.1210/MEND.16.4.0808 [Retrieved on 2018-7-10]
* //
* //
`
* ```
*
* This prepends `[$ID]: ` to each entry, where `$ID` is the ID of that entry, and appends ` [Retrieved on $DATE]`, where `$DATE` is today (constant for all entries).
*
* Here's an example for `asEntryArray`:
*
* ```js
* const cite = new Cite([
* { id: 'a', title: 'Item A', issued: { literal: 2021 } },
* { id: 'b', title: 'Item B', issued: { literal: 2021 } }
* ])
*
* cite.format('bibliography', { asEntryArray: true })
* // [
* // [
* // "a"
* // "Item A. (2021).\n"
* // ],
* // [
* // "b"
* // "Item B. (2021).\n"
* // ]
* // ]
* ```
*
* @memberof module:@citation-js/plugin-csl.output
* @implements module:@citation-js/core.plugins.output~formatter
* @method bibliography
*
* @param {Array} data
* @param {Object} [options={}]
* @param {String} [options.template='apa']
* @param {String} [options.lang]
* @param {String} [options.format='text']
* @param {Booolean} [options.asEntryArray=false]
* @param {Booolean} [options.nosort=false]
* @param {String|Array} [options.entry]
* @param {Cite~wrapper} [options.prepend]
* @param {Cite~wrapper} [options.append]
*
* @return {String} output
*/
function bibliography(data, options = {}) {
const {
template = 'apa',
lang,
format = 'text',
nosort = false
} = options;
const ids = options.entry ? [].concat(options.entry) : data.map(({
id
}) => id);
data = downgradeCsl(data);
const citeproc = prepareEngine(data, template, lang, format);
const sortedIds = citeproc.updateItems(ids, nosort);
if (options.append || options.prepend) {
const items = data.reduce((items, entry) => {
items[entry.id] = entry;
return items;
}, {});
citeproc.sys.wrapBibliographyEntry = function (id) {
const entry = items[id];
return [getAffix(entry, options.prepend), getAffix(entry, options.append)];
};
}
const bibliography = citeproc.makeBibliography();
const [{
bibstart,
bibend
}, bibBody] = bibliography;
const entries = bibBody.map((element, index) => getPrefixedEntry(element, sortedIds[index]));
if (options.asEntryArray) {
return entries.map((element, index) => [sortedIds[index], element]);
}
return bibstart + entries.join('') + bibend;
}
// @ts-nocheck
/**
* https://citeproc-js.readthedocs.io/en/latest/csl-json/markup.html#cite-items
*
* @typedef {Object} module:@citation-js/plugin-csl.output~CiteItem
* @property {String} id
*/
/**
* https://citeproc-js.readthedocs.io/en/latest/csl-json/markup.html#citations
*
* @typedef {Object} module:@citation-js/plugin-csl.output~Citation
* @property {Array} citationItems
* @property {Object} properties
* @property {Number} properties.noteIndex
*/
/**
* @access private
* @param {String|module:@citation-js/plugin-csl.output~CiteItem} citeItem
* @return {module:@citation-js/plugin-csl.output~CiteItem} citeItem
*/
function prepareCiteItem(citeItem) {
return typeof citeItem === 'object' ? citeItem : {
id: citeItem
};
}
/**
* @access private
* @param {String|Array|Array|module:@citation-js/plugin-csl.output~CiteItem|module:@citation-js/plugin-csl.output~Citation} citation
* @return {module:@citation-js/plugin-csl.output~Citation} citation
*/
function prepareCitation(citation) {
if (citation.citationItems) {
return citation;
}
return {
citationItems: [].concat(citation).map(prepareCiteItem),
properties: {
noteIndex: 0
}
};
}
/**
* @access private
* @param {Array|Array|Array} [context=[]]
* @return {Array} citations
*/
function prepareCitations(context) {
if (!context) {
return [];
}
return context.map(prepareCitation);
}
/**
* Here's an example for `entry`:
*
* ```js
* let cite = new Cite([
* { id: 'a', title: 'Item A', issued: { 'date-parts': [[2016]] } },
* { id: 'b', title: 'Item B', issued: { 'date-parts': [[2017]] } },
* { id: 'c', title: 'Item C', issued: { 'date-parts': [[2018]] } }
* ])
*
* cite.format('citation')
* // '(“Item A,” 2016; “Item B,” 2017; “Item C,” 2018)'
*
* cite.format('citation', { entry: ['a', 'b'] })
* // '(“Item A,” 2016; “Item B,” 2017)'
*
* cite.format('citation', { entry: 'a' })
* // '(“Item A,” 2016)'
*
* cite.format('citation', { entry: [{ id: 'a', label: 'page', locator: 123 }] })
* // '(“Item A,” 2016, p. 123)'
* ```
*
* @memberof module:@citation-js/plugin-csl.output
* @implements module:@citation-js/core.plugins.output~formatter
* @method citation
*
* @param {Array} data
* @param {Object} [options={}]
* @param {String} [options.template='apa']
* @param {String} [options.lang]
* @param {String} [options.format='text']
* @param {module:@citation-js/plugin-csl.output~Entries} [options.entry] - list of ids or cite-items of entries to include in the citation (defaults to all)
* @param {Array} [options.citationsPre=[]]
* @param {Array} [options.citationsPost=[]]
*
* @return {String} output
*/
function citation(data, options = {}) {
const {
template = 'apa',
lang,
format = 'text'
} = options;
const ids = data.map(({
id
}) => id);
const entries = options.entry ? options.entry : ids;
data = downgradeCsl(data);
const citeproc = prepareEngine(data, template, lang, format);
const before = prepareCitations(options.citationsPre);
const citation = prepareCitation(entries);
const after = prepareCitations(options.citationsPost);
const output = citeproc.rebuildProcessorState([...before, citation, ...after], format, []);
return output[before.length][2];
}
// @ts-nocheck
add('@csl', {
/**
* @namespace output
* @type Object
* @memberof module:@citation-js/plugin-csl
*/
output: {
bibliography,
citation
},
/**
* @namespace config
* @memberof module:@citation-js/plugin-csl
*/
config: {
/**
* The configuration object also exposes an internal method to prepare a Citeproc engine with given data and configuration:
*
* ```js
* let config = plugins.config.get('@csl')
*
* let citeproc = plugins.engine(
* [{ ... }], // data
* 'apa', // style
* 'en-US', // locale
* 'html' // format
* )
*
* let sortedIds = citeproc.updateItems(
* [...] // data ids
* )
* let makeBibliography = citeproc.makeBibliography()
* ```
*
* @memberof module:@citation-js/plugin-csl.config
* @method engine
* @param {module:@citation-js/core~CSL} data
* @param {String} style
* @param {String} locale
* @param {String} format
*/
engine: prepareEngine,
/**
* Different [CSL Locales](https://github.com/citation-style-language/locales) can be registered like this:
*
* ```js
* let language = 'en-GB'
* let locale = '... ' // The actual XML file
*
* let config = plugins.config.get('@csl')
* config.locales.add(language, locale)
*
* let example = new Cite(...)
* example.format('bibliography', {
* format: 'html',
* template: 'apa',
* lang: language
* })
* ```
*
* @memberof module:@citation-js/plugin-csl.config
* @var {module:@citation-js/core.util.Register} locales
*/
locales,
/**
* Different [CSL Templates](https://github.com/citation-style-language/styles) can be registered like this:
*
* ```js
* let templateName = 'custom'
* let template = '' // The actual XML file
*
* let config = plugins.config.get('@csl')
* config.templates.add(templateName, template)
*
* let example = new Cite(...)
* example.format('bibliography', {
* format: 'html',
* template: templateName,
* lang: 'en-US'
* })
* ```
*
* @memberof module:@citation-js/plugin-csl.config
* @var {module:@citation-js/core.util.Register} templates
*/
templates
}
});
// See https://github.com/nodeca/js-yaml/issues/569
const timestampTag = 'tag:yaml.org,2002:timestamp';
const timestamp = yaml.DEFAULT_SCHEMA.compiledTypeMap.scalar[timestampTag];
const date = new yaml.Type(timestampTag, {
kind: 'scalar',
resolve: timestamp.resolve,
construct: timestamp.construct,
instanceOf: Date,
represent(object) {
return object.toISOString().split('T')[0];
}
});
const CFF_SCHEMA = yaml.DEFAULT_SCHEMA.extend({
implicit: [date],
explicit: []
});
add('@else', {
input: {
'@else/yaml': {
parseType: {
dataType: 'String',
tokenList: {
split: /\n(\s{2})*(-\s)?/,
token: /^[\w-]*: /,
every: false
}
},
parse(file) {
return yaml.load(file, {
json: true
});
}
}
},
output: {
yaml(data) {
return yaml.dump(data, {
schema: CFF_SCHEMA
});
}
}
});
/**
* Format: Citation File Format (CFF) version 1.2.0
* Spec: https://github.com/citation-file-format/citation-file-format/blob/1.2.0/schema-guide.md
*/
const TYPES_TO_TARGET = {
art: 'graphic',
article: 'article-journal',
// more likely
audiovisual: 'motion_picture',
bill: 'bill',
blog: 'post-weblog',
book: 'book',
catalogue: 'collection',
conference: 'event',
'conference-paper': 'paper-conference',
data: 'dataset',
database: 'dataset',
dictionary: 'entry-dictionary',
'edited-work': 'document',
// unmapped
encyclopedia: 'entry-encyclopedia',
'film-broadcast': 'broadcast',
generic: 'document',
'government-document': 'regulation',
grant: 'document',
// unmapped
hearing: 'hearing',
'historical-work': 'classic',
'legal-case': 'legal_case',
'legal-rule': 'legislation',
'magazine-article': 'article-magazine',
manual: 'report',
// substitute presented in the CSL specification
map: 'map',
multimedia: 'motion_picture',
music: 'musical_score',
'newspaper-article': 'article-newspaper',
pamphlet: 'pamphlet',
patent: 'patent',
'personal-communication': 'personal_communication',
proceedings: 'book',
// substitute presented in the CSL specification
report: 'report',
serial: 'periodical',
slides: 'speech',
software: 'software',
'software-code': 'software',
'software-container': 'software',
'software-executable': 'software',
'software-virtual-machine': 'software',
'sound-recording': 'song',
standard: 'standard',
statute: 'legislation',
thesis: 'thesis',
unpublished: 'article',
video: 'motion_picture',
website: 'webpage'
};
const TYPES_TO_SOURCE = {
article: 'article',
'article-journal': 'article',
'article-magazine': 'magazine-article',
'article-newspaper': 'newspaper-article',
bill: 'bill',
book: 'book',
broadcast: 'film-broadcast',
chapter: 'generic',
// unmapped
classic: 'historical-work',
collection: 'catalogue',
dataset: 'data',
document: 'generic',
entry: 'generic',
// unmapped
'entry-dictionary': 'dictionary',
'entry-encyclopedia': 'encyclopedia',
event: 'conference',
figure: 'generic',
// unmapped
graphic: 'art',
hearing: 'hearing',
interview: 'sound-recording',
legal_case: 'legal-case',
legislation: 'statute',
manuscript: 'historical-work',
map: 'map',
motion_picture: 'film-broadcast',
musical_score: 'music',
pamphlet: 'pamphlet',
'paper-conference': 'conference-paper',
patent: 'patent',
performance: 'generic',
// unmapped
periodical: 'serial',
personal_communication: 'personal-communication',
post: 'serial',
'post-weblog': 'blog',
regulation: 'government-document',
report: 'report',
review: 'generic',
// unmapped
'review-book': 'generic',
// unmapped
software: 'software',
song: 'sound-recording',
speech: 'slides',
standard: 'standard',
thesis: 'thesis',
treaty: 'generic',
webpage: 'website'
};
const ENTITY_PROPS = [{
source: 'family-names',
target: 'family'
}, {
source: 'given-names',
target: 'given'
}, {
source: 'name-particle',
target: 'non-dropping-particle'
}, {
source: 'name-suffix',
target: 'suffix'
}, {
source: 'name',
target: 'literal'
}, {
source: 'orcid',
target: '_orcid'
}];
const entity = new Translator(ENTITY_PROPS);
const PROP_CONVERTERS = {
names: {
toTarget(names) {
return names.map(entity.convertToTarget);
},
toSource(names) {
return names.map(entity.convertToSource);
}
},
publisher: {
toTarget({
name,
city,
region,
country
}) {
const place = [city, region, country].filter(Boolean).join(', ');
return [name, place || undefined];
},
toSource(name, place) {
const entity = {
name
};
if (place) {
// Parse the following:
// - Country
// - City, Country
// - City, Region, Country
const parts = place.split(', ');
entity.country = parts.pop();
if (parts.length === 2) {
entity.region = parts.pop();
}
if (parts.length === 1) {
entity.city = parts.pop();
}
}
return entity;
}
},
date: {
toTarget(date) {
if (date instanceof Date) {
return parse$9(date.toISOString());
} else {
return parse$9(new Date(date).toISOString());
}
},
toSource(date) {
if (date.raw) {
return date.raw;
}
const [year, month, day] = date['date-parts'][0];
if (day) {
return new Date(Date.UTC(year, month - 1, day));
} else if (month) {
return new Date(Date.UTC(year, month - 1));
} else {
return new Date(Date.UTC(year));
}
}
}
};
const SHARED_PROPS = ['abstract', {
source: 'authors',
target: 'author',
convert: PROP_CONVERTERS.names
},
// TODO cff: commit
// TODO cff: contact
{
source: 'date-released',
target: 'issued',
when: {
target: {
type: 'software'
}
},
convert: PROP_CONVERTERS.date
}, {
source: 'doi',
target: 'DOI'
}, {
source: 'identifiers',
target: ['DOI', 'ISBN', 'ISSN', 'PMCID', 'PMID', 'URL'],
convert: {
toTarget(identifiers) {
const newIdentifiers = Array(6).fill(undefined);
for (const {
type,
value
} of identifiers) {
if (!this.doi && type === 'doi') {
newIdentifiers[0] = value;
}
if (!this.url && type === 'url') {
newIdentifiers[5] = value;
}
if (type === 'other' && value.startsWith('urn:isbn:')) {
newIdentifiers[1] = value.slice(9);
}
if (type === 'other' && value.startsWith('urn:issn:')) {
newIdentifiers[2] = value.slice(9);
}
if (type === 'other' && value.startsWith('pmcid:')) {
newIdentifiers[3] = value.slice(6);
}
if (type === 'other' && value.startsWith('pmid:')) {
newIdentifiers[4] = value.slice(5);
}
}
return newIdentifiers;
},
toSource(doi, isbn, issn, pmcid, pmid, url) {
return [doi && {
type: 'doi',
value: doi
}, url && {
type: 'url',
value: url
}, isbn && {
type: 'other',
value: `urn:isbn:${isbn}`
}, issn && {
type: 'other',
value: `urn:issn:${issn}`
}, pmcid && {
type: 'other',
value: `pmcid:${pmcid}`
}, pmid && {
type: 'other',
value: `pmid:${pmid}`
}].filter(Boolean);
}
}
}, {
source: 'keywords',
target: 'keyword',
convert: {
toTarget(keywords) {
return keywords.join(',');
},
toSource(keywords) {
return keywords.split(/,\s*/g);
}
}
},
// TODO cff: license
// TODO cff: license-url
// TODO cff: message *
// TODO cff: repository
// TODO cff: repository-code
// TODO cff: repository-artifact
{
source: 'title',
target: 'title',
when: {
source: {
term: false,
entry: false
},
target: {
type(type) {
return !['entry', 'entry-dictionary', 'entry-encyclopedia'].includes(type);
}
}
}
}, {
source: 'title',
target: 'container-title',
when: {
source: {
entry: true,
journal: false
},
target: {
type: ['entry']
}
}
}, {
source: 'title',
target: 'container-title',
when: {
source: {
term: true,
journal: false
},
target: {
type: ['entry-dictionary', 'entry-encyclopedia']
}
}
}, {
source: 'url',
target: 'URL'
}, 'version'];
const MAIN_PROPS = [
// TYPES
{
source: 'type',
target: 'type',
convert: {
toSource(type) {
return type === 'dataset' ? 'dataset' : 'software';
},
toTarget(type) {
return type === 'dataset' ? 'dataset' : 'software';
}
}
},
// Include main mappings
...SHARED_PROPS];
const REF_PROPS = [
// Include main mappings
...SHARED_PROPS,
// ABBREVIATION
{
source: 'abbreviation',
target: 'title-short'
}, {
source: 'abbreviation',
target: 'shortTitle'
},
// COLLECTIONS
// TODO cff: collection-doi
// TODO cff: collection-type
'collection-title',
// COMMUNICATION
{
source: 'recipients',
target: 'recipient',
convert: PROP_CONVERTERS.names
}, {
source: 'senders',
target: 'authors',
convert: PROP_CONVERTERS.names
},
// CONFERENCE
{
source: 'conference',
target: ['event-title', 'event-date', 'event-place', 'event'],
convert: {
toSource(name, date, place, nameFallback) {
const entity = {
name: name || nameFallback
};
if (place) {
entity.location = place;
}
if (date) {
entity['date-start'] = PROP_CONVERTERS.date.toSource(date);
if (date['date-parts'] && date['date-parts'].length === 2) {
entity['date-end'] = PROP_CONVERTERS.date.toSource({
'date-parts': [date['date-parts'][1]]
});
}
}
return entity;
},
toTarget(event) {
return [event.name, parse$9(event['date-start'].toISOString(), event['date-end'].toISOString()), event.location];
}
}
},
// COPYRIGHT
// TODO cff: contact
// TODO cff: copyright
// DATABASE
{
source: 'database',
target: 'source'
},
// TODO cff: database-provider NOTE entity
// DATE
{
source: 'date-accessed',
target: 'accessed',
convert: PROP_CONVERTERS.date
}, {
source: 'date-downloaded',
target: 'accessed',
convert: PROP_CONVERTERS.date,
when: {
source: {
'date-accessed': false
},
target: false
}
}, {
source: 'date-published',
target: 'issued',
convert: PROP_CONVERTERS.date,
when: {
source: {
'date-released': false
},
target() {
return this.type !== 'book' || !this.version;
}
}
}, {
source: ['year', 'month'],
target: 'issued',
when: {
source: {
'date-published': false,
'date-released': false,
year: true
}
},
convert: {
toTarget(year, month) {
const date = month ? [year, month] : [year];
return {
'date-parts': [date]
};
},
toSource(issued) {
const [year, month] = issued['date-parts'][0];
return [year, month];
}
}
}, {
source: 'year-original',
target: 'original-date',
convert: {
toTarget(year) {
return {
'date-parts': [[year]]
};
},
toSource(date) {
return date['date-parts'][0][0];
}
}
},
// EDITION
'edition',
// EDITORS
{
source: 'editors',
target: 'editor',
convert: PROP_CONVERTERS.names
}, {
source: 'editors-series',
target: 'collection-editor',
convert: PROP_CONVERTERS.names
},
// ENTRY
{
source: 'entry',
target: 'title',
when: {
source: {
term: false
},
target: {
type: 'entry'
}
}
}, {
source: 'term',
target: 'title',
when: {
target: {
type: ['entry-dictionary', 'entry-encyclopedia']
}
}
},
// FORMAT
{
source: 'format',
target: 'dimensions'
}, 'medium',
// GENRE
{
source: 'data-type',
target: 'genre',
when: {
target: {
type(type) {
return type !== 'thesis';
}
}
}
}, {
source: 'thesis-type',
target: 'genre',
when: {
source: {
'data-type': false
},
target: {
type: 'thesis'
}
}
},
// IDENTIFIERS
{
source: 'isbn',
target: 'ISBN'
}, {
source: 'issn',
target: 'ISSN'
},
// TODO cff: nihmsid
{
source: 'pmcid',
target: 'PMCID'
},
// ISSUE
'issue',
// JOURNAL
{
source: 'journal',
target: 'container-title'
}, {
source: 'volume-title',
target: 'volume-title'
}, {
source: 'issue-title',
target: 'volume-title',
when: {
source: {
'volume-title': false
},
target: false
}
},
// TODO cff: issue-date
// LANGUAGE
{
source: 'languages',
target: 'language',
when: {
target: true,
// NOTE: possible values not as strict in csl, so test (crudely) if the value is ok first
source: {
language(code) {
return /[a-z]{2,3}/.test(code);
}
}
},
convert: {
// NOTE: CSL can only hold one language
toSource(language) {
return [language];
},
toTarget(languages) {
return languages[0];
}
}
},
// LOCATION
{
source: 'location',
target: ['archive', 'archive-place'],
convert: PROP_CONVERTERS.publisher
},
// LOCATION (CODE)
// TODO cff: filename
// TODO cff: loc-start
// TODO cff: loc-end
// NOTES
{
source: 'notes',
target: 'note',
when: {
source: {
scope: false
}
}
}, {
source: 'scope',
target: 'note',
when: {
target: false
}
},
// NUMBER
'number',
// PATENT
{
source: 'patent-states',
target: 'jurisdiction',
// NOTE: CSL jurisdiction can contain more than just US states
when: {
target: false
},
convert: {
toTarget(states) {
return states.join(', ');
}
}
},
// PUBLISHER
{
source: ['institution', 'department'],
target: ['publisher', 'publisher-place'],
when: {
source: {
publisher: false
},
target: {
type: 'thesis'
}
},
convert: {
toTarget(institution, department) {
const [name, place] = PROP_CONVERTERS.publisher.toTarget(institution);
return [department ? `${department}, ${name}` : name, place];
},
toSource(name, place) {
return [PROP_CONVERTERS.publisher.toSource(name, place)];
}
}
}, {
source: 'publisher',
target: ['publisher', 'publisher-place'],
when: {
target: {
type(type) {
return type !== 'thesis';
}
}
},
convert: PROP_CONVERTERS.publisher
},
// SECTION
'section',
// STATUS
{
source: 'status',
target: 'status',
when: {
source: true,
// NOTE: possible values not as strict in csl, so test if the value is ok first
target: {
status: ['in-preparation', 'abstract', 'submitted', 'in-press', 'advance-online', 'preprint']
}
}
},
// PAGES
{
source: 'start',
target: 'page-first',
when: {
target: {
page: false
}
}
}, {
source: ['start', 'end'],
target: 'page',
convert: {
toTarget(start, end) {
return end ? `${start}-${end}` : start;
},
toSource(page) {
const [start, end] = page.split('-');
return end ? [start, end] : [start];
}
}
}, {
source: 'pages',
target: 'number-of-pages'
},
// TRANSLATORS
{
source: 'translators',
target: 'translator',
convert: PROP_CONVERTERS.names
},
// TYPES
{
source: 'type',
target: 'type',
convert: {
toTarget(type) {
return TYPES_TO_TARGET[type] || 'document';
},
toSource(type) {
if (type === 'book' && this['event-title']) {
return 'proceedings';
}
return TYPES_TO_SOURCE[type] || 'generic';
}
}
},
// VOLUMES
'volume', {
source: 'number-volumes',
target: 'number-of-volumes'
}];
const mainTranslator = new Translator(MAIN_PROPS);
const refTranslator = new Translator(REF_PROPS);
const CFF_VERSION = '1.2.0';
/** Add doi or url as unique id if available to make citation easy */
function addId(entry) {
if ('DOI' in entry) {
entry.id = entry.DOI;
} else if ('URL' in entry) {
entry.id = entry.URL.replace('http://', '').replace('https://', '');
}
}
function parse(input) {
const main = mainTranslator.convertToTarget(input);
if (input['cff-version'] <= '1.1.0') {
main.type = TYPES_TO_TARGET.software;
}
main._cff_mainReference = true;
addId(main);
const output = [main];
if (input['preferred-citation']) {
const preferredCitation = refTranslator.convertToTarget(input['preferred-citation']);
addId(preferredCitation);
output.push(preferredCitation);
}
if (Array.isArray(input.references)) {
output.push(...input.references.map(refTranslator.convertToTarget));
}
return output;
}
function format(input, options = {}) {
input = input.slice();
const {
main,
preferred,
cffVersion = CFF_VERSION,
message = 'Please cite the following works when using this software.'
} = options;
let preferredCitation;
const preferredIndex = input.findIndex(entry => preferred && entry.id === preferred);
if (cffVersion >= '1.2.0' && preferredIndex > -1) {
preferredCitation = refTranslator.convertToSource(...input.splice(preferredIndex, 1));
}
let mainIndex = input.findIndex(entry => main ? entry.id === main : entry._cff_mainReference);
mainIndex = mainIndex > -1 ? mainIndex : 0;
const mainRef = input[mainIndex] ? mainTranslator.convertToSource(...input.splice(mainIndex, 1)) : {};
if (mainRef && cffVersion < '1.2.0') {
delete mainRef.type;
}
const cff = _extends({
'cff-version': cffVersion,
message
}, mainRef);
if (preferredCitation) {
cff['preferred-citation'] = preferredCitation;
}
if (input.length) {
cff.references = input.map(refTranslator.convertToSource);
}
return cff;
}
add('@cff', {
input: {
'@cff/object': {
parseType: {
dataType: 'SimpleObject',
propertyConstraint: {
props: 'cff-version'
}
},
parse
}
},
output: {
cff(data, options = {}) {
const output = format(data, options);
if (options.type === 'object') {
return output;
} else {
return format$7('yaml', output);
}
}
}
});
function clone(obj) {
const copy = {};
for (const key in obj) {
copy[key] = typeof obj[key] === 'object' ? clone(obj[key]) : obj[key];
}
return copy;
}
function Cite(data, opts) {
if (!(this instanceof Cite)) {
return new Cite(data, opts);
}
const self = new Cite$1(data, opts);
this._options = self._options;
this.log = self.log;
this.data = self.data;
}
Cite.plugins = clone(plugins);
var mla = ``;
var chicago = ``;
var harvard1 = ``;
var vancouver = ``;
const config = Cite.plugins.config.get('@csl');
// Citation.js comes with apa
config.templates.add('vancouver', vancouver);
config.templates.add('harvard1', harvard1);
config.templates.add('mla', mla);
config.templates.add('chicago', chicago);
const rehypeCitation = rehypeCitationGenerator(Cite);
export { Cite, rehypeCitation as default, rehypeCitationGenerator };
//# sourceMappingURL=rehype-citation.mjs.map