diff --git a/package-lock.json b/package-lock.json index 2fe9aee..3e3cb6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@babel/core": "^7.22.8", "@babel/plugin-proposal-numeric-separator": "^7.18.6", "@babel/preset-env": "^7.22.7", + "@formatjs/intl-segmenter": "^11.5.5", "babel-loader": "^9.1.3", "browserslist": "^4.21.9", "copy-webpack-plugin": "^11.0.0", @@ -1765,6 +1766,36 @@ "node": ">=10.0.0" } }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", + "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "dev": true, + "dependencies": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-segmenter": { + "version": "11.5.5", + "resolved": "https://registry.npmjs.org/@formatjs/intl-segmenter/-/intl-segmenter-11.5.5.tgz", + "integrity": "sha512-mMbJKFGzwYJBcwfL9EfqFje75Ce5WPar5rSi7wWvFtBPFY2Zi1cWIss7FSm2MNNM9l1BycBAsBQuXFt+Hd+0tQ==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.2", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -8938,6 +8969,12 @@ "node": ">=8.0" } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", diff --git a/package.json b/package.json index 3a4f705..8aade59 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "@babel/core": "^7.22.8", "@babel/plugin-proposal-numeric-separator": "^7.18.6", "@babel/preset-env": "^7.22.7", + "@formatjs/intl-segmenter": "^11.5.5", "babel-loader": "^9.1.3", "browserslist": "^4.21.9", "copy-webpack-plugin": "^11.0.0", diff --git a/src/drafty.js b/src/drafty.js index 3a9cb37..03ed5a2 100644 --- a/src/drafty.js +++ b/src/drafty.js @@ -67,6 +67,8 @@ const ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'na 'ref', 'size', 'state', 'url', 'val', 'width' ]; +const segmenter = new Intl.Segmenter(); + // Regular expressions for parsing inline formats. Javascript does not support lookbehind, // so it's a bit messy. const INLINE_STYLES = [ @@ -597,9 +599,20 @@ Drafty.parse = function(content) { result.txt = blx[0].txt; result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []); + if (result.fmt.length) { + const segments = segmenter.segment(result.txt); + for (const ele of result.fmt) { + ({ + at: ele.at, + len: ele.len + } = + getCorrectLengthsWhenTreatedAsGrapheme(ele, segments, result.txt)); + } + } + for (let i = 1; i < blx.length; i++) { const block = blx[i]; - const offset = result.txt.length + 1; + const offset = getGraphemesFromString(result.txt).length + 1; result.fmt.push({ tp: 'BR', @@ -607,18 +620,40 @@ Drafty.parse = function(content) { at: offset - 1 }); + let segments = {}; + result.txt += ' ' + block.txt; if (block.fmt) { - result.fmt = result.fmt.concat(block.fmt.map((s) => { - s.at += offset; - return s; - })); + segments = segmenter.segment(block.txt); + result.fmt = result.fmt.concat( + block.fmt.map((s) => { + const { + at: correctAt, + len: correctLen + } = + getCorrectLengthsWhenTreatedAsGrapheme(s, segments, block.txt); + s.at = correctAt + offset; + s.len = correctLen; + return s; + }) + ); } if (block.ent) { - result.fmt = result.fmt.concat(block.ent.map((s) => { - s.at += offset; - return s; - })); + if (isEmptyObject(segments)) { + segments = segmenter.segment(block.txt); + } + result.fmt = result.fmt.concat( + block.ent.map((s) => { + const { + at: correctAt, + len: correctLen + } = + getCorrectLengthsWhenTreatedAsGrapheme(s, segments, block.txt); + s.at = correctAt + offset; + s.len = correctLen; + return s; + }) + ); } } @@ -650,7 +685,7 @@ Drafty.append = function(first, second) { } first.txt = first.txt || ''; - const len = first.txt.length; + const len = getGraphemesFromString(first.txt).length; if (typeof second == 'string') { first.txt += second; @@ -998,7 +1033,7 @@ Drafty.quote = function(header, uid, body) { // Wrap into a quote. quote.fmt.push({ at: 0, - len: quote.txt.length, + len: getGraphemesFromString(quote.txt).length, tp: 'QQ' }); @@ -1018,7 +1053,7 @@ Drafty.mention = function(name, uid) { txt: name || '', fmt: [{ at: 0, - len: (name || '').length, + len: getGraphemesFromString(name || '').length, key: 0 }], ent: [{ @@ -1336,7 +1371,7 @@ Drafty.appendLineBreak = function(content) { }; content.fmt = content.fmt || []; content.fmt.push({ - at: content.txt.length, + at: getGraphemesFromString(content.txt).length, len: 1, tp: 'BR' }); @@ -2135,7 +2170,7 @@ function draftyToTree(doc) { key: key }); return; - } else if (at + len > txt.length) { + } else if (at + len > getGraphemesFromString(txt).length) { // Span is out of bounds. return; } @@ -2187,7 +2222,8 @@ function draftyToTree(doc) { } }); - let tree = spansToTree({}, txt, 0, txt.length, spans); + const graphemes = getGraphemesFromString(txt); + let tree = spansToTree({}, graphemes, 0, graphemes.length, spans); // Flatten tree nodes. const flatten = function(node) { @@ -2236,11 +2272,13 @@ function addNode(parent, n) { } // Returns a tree of nodes. -function spansToTree(parent, text, start, end, spans) { +function spansToTree(parent, graphemes, start, end, spans) { if (!spans || spans.length == 0) { if (start < end) { addNode(parent, { - text: text.substring(start, end) + text: graphemes.slice(start, end) + .map(segment => segment.segment) + .join('') }); } return parent; @@ -2262,7 +2300,9 @@ function spansToTree(parent, text, start, end, spans) { // Add un-styled range before the styled span starts. if (start < span.start) { addNode(parent, { - text: text.substring(start, span.start) + text: graphemes.slice(start, span.start) + .map(segment => segment.segment) + .join('') }); start = span.start; } @@ -2295,14 +2335,17 @@ function spansToTree(parent, text, start, end, spans) { type: span.type, data: span.data, key: span.key - }, text, start, span.end, subspans)); + }, graphemes, start, span.end, subspans)); start = span.end; } // Add the last unformatted range. if (start < end) { addNode(parent, { - text: text.substring(start, end) + text: graphemes + .slice(start, end) + .map((segment) => segment.segment) + .join('') }); } @@ -2318,7 +2361,7 @@ function treeToDrafty(doc, tree, keymap) { doc.txt = doc.txt || ''; // Checkpoint to measure length of the current tree node. - const start = doc.txt.length; + const start = getGraphemesFromString(doc.txt).length; if (tree.text) { doc.txt += tree.text; @@ -2329,7 +2372,7 @@ function treeToDrafty(doc, tree, keymap) { } if (tree.type) { - const len = doc.txt.length - start; + const len = getGraphemesFromString(doc.txt).length - start; doc.fmt = doc.fmt || []; if (Object.keys(tree.data || {}).length > 0) { doc.ent = doc.ent || []; @@ -2452,12 +2495,15 @@ function shortenTree(tree, limit, tail) { node.text = tail; limit = -1; } else if (node.text) { - const len = node.text.length; - if (len > limit) { - node.text = node.text.substring(0, limit) + tail; + const graphemes = getGraphemesFromString(node.text); + if (graphemes.length > limit) { + node.text = graphemes + .slice(0, limit) + .map((segment) => segment.segment) + .join('') + tail; limit = -1; } else { - limit -= len; + limit -= graphemes.length; } } return node; @@ -2633,6 +2679,63 @@ function copyEntData(data, light, allow) { return null; } +// Returns true if object is empty, if undefined returns true +function isEmptyObject(obj) { + return Object.keys(obj ?? {}).length == 0; +}; + + +// Returns an array(len equal to og string) such that each index +// denotes the position of char in string in a grapheme array(created from that string) +// Eg: string: "Hi👋🏼Hi" -> [0,1,2,2,2,2,3,4] +function getGraphemeIndices(graphemes) { + const result = []; + let graphemeIndex = 0; + let charIndex = 0; + + // Iterate over the grapheme clusters + for (const { + segment + } + of graphemes) { + // Map the character indices to the grapheme index + for (let i = 0; i < segment.length; i++) { + result[charIndex + i] = graphemeIndex; + } + + // Increment the character index by the length of the grapheme cluster + charIndex += segment.length; + + // Increment the grapheme index + graphemeIndex++; + } + + return result; +} + +// Returns correct offset and length, given the wrong offset, graphemes and og string +function getCorrectLengthsWhenTreatedAsGrapheme(fmt, segments, txt) { + segments = segments ?? segmenter.segment(txt); + + const indices = getGraphemeIndices(segments); + + const correctAt = indices[fmt.at]; + const correctLen = + fmt.at + fmt.len <= txt.length ? + indices[fmt.at + fmt.len - 1] - correctAt : + fmt.len; + + return { + at: correctAt, + len: correctLen + 1 + }; +} + +// Returns graphme cluster array from string +function getGraphemesFromString(input) { + return Array.from(segmenter.segment(input)); +} + if (typeof module != 'undefined') { module.exports = Drafty; } diff --git a/src/drafty.test.js b/src/drafty.test.js index a7628d2..a7bd52d 100644 --- a/src/drafty.test.js +++ b/src/drafty.test.js @@ -192,6 +192,74 @@ const parse_this = [ "len": 4 }, ], } + ], + [ + '🕯️ *bold* https://google.com', + { + txt: '🕯️ bold https://google.com', + fmt: [{ + at: 2, + len: 4, + tp: 'ST', + }, + { + at: 7, + key: 0, + len: 18, + }, + ], + ent: [{ + tp: 'LN', + data: { + url: 'https://google.com', + }, + }, ] + } + ], + [ + 'Hi 👋🏼 Visit http://localhost:6060\n*New* *line*🫡 Visit http://localhost:8080', + { + txt: 'Hi 👋🏼 Visit http://localhost:6060 New line🫡 Visit http://localhost:8080', + fmt: [{ + at: 11, + len: 21, + key: 0, + }, + { + at: 32, + len: 1, + tp: 'BR', + }, + { + at: 33, + len: 3, + tp: 'ST', + }, + { + at: 37, + len: 4, + tp: 'ST', + }, + { + at: 49, + len: 21, + key: 1, + }, + ], + ent: [{ + tp: 'LN', + data: { + url: 'http://localhost:6060', + }, + }, + { + tp: 'LN', + data: { + url: 'http://localhost:8080', + }, + }, + ], + }, ] ]; @@ -711,7 +779,7 @@ const shorten_this = [ }] }, { - "txt": "😀 b1👩🏽‍✈️b2 smile 123 1…", + "txt": "😀 b1👩🏽‍✈️b2 smile …", "fmt": [{ "tp": "ST", "at": 2, @@ -864,6 +932,59 @@ const forward_this = [ "txt": "Alice Johnson This is a simple replyThis is a reply to reply" } ], + [{ + "txt": "➦ tinodeu 🔴Hello🔴 🟠Hello🟠 🟡Hello🟡 🟢Hello🟢", + "fmt": [{ + "len": 9 + }, + { + "at": 9, + "len": 1, + "tp": "BR" + }, + { + "at": 19, + "len": 1, + "tp": "BR" + }, + { + "at": 29, + "len": 1, + "tp": "BR" + }, + { + "at": 39, + "len": 1, + "tp": "BR" + } + ], + "ent": [{ + "tp": "MN", + "data": { + "val": "usrfv76ZZoJQJc" + } + }] + }, + { + "txt": "🔴Hello🔴 🟠Hello🟠 🟡Hello🟡 🟢Hello🟢", + "fmt": [{ + "tp": "BR", + "at": 9, + "len": 1 + }, + { + "tp": "BR", + "at": 19, + "len": 1 + }, + { + "tp": "BR", + "at": 29, + "len": 1 + } + ] + } + ] ]; test.each(forward_this)('Drafty.forwardedContent %j', (src, exp) => { @@ -952,6 +1073,63 @@ const preview_this = [ "txt": "➦ This is a reply to re…" } ], + [{ + "txt": 'Hi 👋🏼 Visit http://localhost:6060 New line🫡 Visit http://localhost:8080', + "fmt": [{ + "at": 11, + "len": 21, + "key": 0, + }, + { + "at": 32, + "len": 1, + "tp": 'BR', + }, + { + "at": 33, + "len": 3, + "tp": 'ST', + }, + { + "at": 37, + "len": 4, + "tp": 'ST', + }, + { + "at": 49, + "len": 21, + "key": 1, + }, + ], + "ent": [{ + "tp": 'LN', + "data": { + "url": 'http://localhost:6060', + }, + }, + { + "tp": 'LN', + "data": { + "url": 'http://localhost:8080', + }, + }, + ], + }, + { + "txt": "Hi 👋🏼 Visit http://localh…", + "fmt": [{ + "at": 11, + "len": 14, + "key": 0 + }], + "ent": [{ + "tp": "LN", + "data": { + "url": "http://localhost:6060" + } + }] + } + ] ]; test.each(preview_this)('Drafty.preview %j', (src, exp) => { @@ -1321,3 +1499,53 @@ const invalid_this = [ test.each(invalid_this)('Invalid Drafty %j', (src, exp) => { expect(Drafty.UNSAFE_toHTML(src)).toEqual(exp); }); + +const quote_this = [ + [{ + "txt": "😀 b1👩🏽‍✈️b2 smile 123 123 123 123", + "fmt": [{ + "tp": "ST", + "at": 8, + "len": 5 + }, + { + "tp": "EM", + "at": 22, + "len": 3 + } + ] + }, { + "ent": [{ + "data": { + "val": "usrbzV_721mIW0" + }, + "tp": "MN", + }, ], + "fmt": [{ + "at": 0, + "key": 0, + "len": 11, + }, { + "at": 11, + "len": 1, + "tp": "BR", + }, { + "at": 20, + "len": 5, + "tp": "ST", + }, { + "at": 34, + "len": 3, + "tp": "EM", + }, { + "at": 0, + "len": 41, + "tp": "QQ" + }, ], + "txt": "tinode-user 😀 b1👩🏽‍✈️b2 smile 123 123 123 123" + }], +] + +test.each(quote_this)('Drafty.quote %j', (src, exp) => { + expect(Drafty.quote("tinode-user", "usrbzV_721mIW0", src)).toEqual(exp); +}) diff --git a/src/tinode.js b/src/tinode.js index ac8d698..0a98ecf 100644 --- a/src/tinode.js +++ b/src/tinode.js @@ -53,6 +53,7 @@ import * as Const from './config.js'; import CommError from './comm-error.js'; import Connection from './connection.js'; import DBCache from './db.js'; +import '@formatjs/intl-segmenter/polyfill' import Drafty from './drafty.js'; import LargeFileHelper from './large-file.js'; import MetaGetBuilder from './meta-builder.js'; diff --git a/umd/tinode.dev.js b/umd/tinode.dev.js index dc639d4..6277c11 100644 --- a/umd/tinode.dev.js +++ b/umd/tinode.dev.js @@ -12,6 +12,9660 @@ return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/262.js": +/*!************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/262.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ArrayCreate: () => (/* binding */ ArrayCreate), +/* harmony export */ DateFromTime: () => (/* binding */ DateFromTime), +/* harmony export */ Day: () => (/* binding */ Day), +/* harmony export */ DayFromYear: () => (/* binding */ DayFromYear), +/* harmony export */ DayWithinYear: () => (/* binding */ DayWithinYear), +/* harmony export */ DaysInYear: () => (/* binding */ DaysInYear), +/* harmony export */ HasOwnProperty: () => (/* binding */ HasOwnProperty), +/* harmony export */ HourFromTime: () => (/* binding */ HourFromTime), +/* harmony export */ InLeapYear: () => (/* binding */ InLeapYear), +/* harmony export */ MinFromTime: () => (/* binding */ MinFromTime), +/* harmony export */ MonthFromTime: () => (/* binding */ MonthFromTime), +/* harmony export */ OrdinaryHasInstance: () => (/* binding */ OrdinaryHasInstance), +/* harmony export */ SameValue: () => (/* binding */ SameValue), +/* harmony export */ SecFromTime: () => (/* binding */ SecFromTime), +/* harmony export */ TimeClip: () => (/* binding */ TimeClip), +/* harmony export */ TimeFromYear: () => (/* binding */ TimeFromYear), +/* harmony export */ ToNumber: () => (/* binding */ ToNumber), +/* harmony export */ ToObject: () => (/* binding */ ToObject), +/* harmony export */ ToString: () => (/* binding */ ToString), +/* harmony export */ Type: () => (/* binding */ Type), +/* harmony export */ WeekDay: () => (/* binding */ WeekDay), +/* harmony export */ YearFromTime: () => (/* binding */ YearFromTime), +/* harmony export */ msFromTime: () => (/* binding */ msFromTime) +/* harmony export */ }); +/** + * https://tc39.es/ecma262/#sec-tostring + */ +function ToString(o) { + // Only symbol is irregular... + if (typeof o === 'symbol') { + throw TypeError('Cannot convert a Symbol value to a string'); + } + return String(o); +} +/** + * https://tc39.es/ecma262/#sec-tonumber + * @param val + */ +function ToNumber(val) { + if (val === undefined) { + return NaN; + } + if (val === null) { + return +0; + } + if (typeof val === 'boolean') { + return val ? 1 : +0; + } + if (typeof val === 'number') { + return val; + } + if (typeof val === 'symbol' || typeof val === 'bigint') { + throw new TypeError('Cannot convert symbol/bigint to number'); + } + return Number(val); +} +/** + * https://tc39.es/ecma262/#sec-tointeger + * @param n + */ +function ToInteger(n) { + var number = ToNumber(n); + if (isNaN(number) || SameValue(number, -0)) { + return 0; + } + if (isFinite(number)) { + return number; + } + var integer = Math.floor(Math.abs(number)); + if (number < 0) { + integer = -integer; + } + if (SameValue(integer, -0)) { + return 0; + } + return integer; +} +/** + * https://tc39.es/ecma262/#sec-timeclip + * @param time + */ +function TimeClip(time) { + if (!isFinite(time)) { + return NaN; + } + if (Math.abs(time) > 8.64 * 1e15) { + return NaN; + } + return ToInteger(time); +} +/** + * https://tc39.es/ecma262/#sec-toobject + * @param arg + */ +function ToObject(arg) { + if (arg == null) { + throw new TypeError('undefined/null cannot be converted to object'); + } + return Object(arg); +} +/** + * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-samevalue + * @param x + * @param y + */ +function SameValue(x, y) { + if (Object.is) { + return Object.is(x, y); + } + // SameValue algorithm + if (x === y) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + return x !== 0 || 1 / x === 1 / y; + } + // Step 6.a: NaN == NaN + return x !== x && y !== y; +} +/** + * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-arraycreate + * @param len + */ +function ArrayCreate(len) { + return new Array(len); +} +/** + * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-hasownproperty + * @param o + * @param prop + */ +function HasOwnProperty(o, prop) { + return Object.prototype.hasOwnProperty.call(o, prop); +} +/** + * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-type + * @param x + */ +function Type(x) { + if (x === null) { + return 'Null'; + } + if (typeof x === 'undefined') { + return 'Undefined'; + } + if (typeof x === 'function' || typeof x === 'object') { + return 'Object'; + } + if (typeof x === 'number') { + return 'Number'; + } + if (typeof x === 'boolean') { + return 'Boolean'; + } + if (typeof x === 'string') { + return 'String'; + } + if (typeof x === 'symbol') { + return 'Symbol'; + } + if (typeof x === 'bigint') { + return 'BigInt'; + } +} +var MS_PER_DAY = 86400000; +/** + * https://www.ecma-international.org/ecma-262/11.0/index.html#eqn-modulo + * @param x + * @param y + * @return k of the same sign as y + */ +function mod(x, y) { + return x - Math.floor(x / y) * y; +} +/** + * https://tc39.es/ecma262/#eqn-Day + * @param t + */ +function Day(t) { + return Math.floor(t / MS_PER_DAY); +} +/** + * https://tc39.es/ecma262/#sec-week-day + * @param t + */ +function WeekDay(t) { + return mod(Day(t) + 4, 7); +} +/** + * https://tc39.es/ecma262/#sec-year-number + * @param y + */ +function DayFromYear(y) { + return Date.UTC(y, 0) / MS_PER_DAY; +} +/** + * https://tc39.es/ecma262/#sec-year-number + * @param y + */ +function TimeFromYear(y) { + return Date.UTC(y, 0); +} +/** + * https://tc39.es/ecma262/#sec-year-number + * @param t + */ +function YearFromTime(t) { + return new Date(t).getUTCFullYear(); +} +function DaysInYear(y) { + if (y % 4 !== 0) { + return 365; + } + if (y % 100 !== 0) { + return 366; + } + if (y % 400 !== 0) { + return 365; + } + return 366; +} +function DayWithinYear(t) { + return Day(t) - DayFromYear(YearFromTime(t)); +} +function InLeapYear(t) { + return DaysInYear(YearFromTime(t)) === 365 ? 0 : 1; +} +/** + * https://tc39.es/ecma262/#sec-month-number + * @param t + */ +function MonthFromTime(t) { + var dwy = DayWithinYear(t); + var leap = InLeapYear(t); + if (dwy >= 0 && dwy < 31) { + return 0; + } + if (dwy < 59 + leap) { + return 1; + } + if (dwy < 90 + leap) { + return 2; + } + if (dwy < 120 + leap) { + return 3; + } + if (dwy < 151 + leap) { + return 4; + } + if (dwy < 181 + leap) { + return 5; + } + if (dwy < 212 + leap) { + return 6; + } + if (dwy < 243 + leap) { + return 7; + } + if (dwy < 273 + leap) { + return 8; + } + if (dwy < 304 + leap) { + return 9; + } + if (dwy < 334 + leap) { + return 10; + } + if (dwy < 365 + leap) { + return 11; + } + throw new Error('Invalid time'); +} +function DateFromTime(t) { + var dwy = DayWithinYear(t); + var mft = MonthFromTime(t); + var leap = InLeapYear(t); + if (mft === 0) { + return dwy + 1; + } + if (mft === 1) { + return dwy - 30; + } + if (mft === 2) { + return dwy - 58 - leap; + } + if (mft === 3) { + return dwy - 89 - leap; + } + if (mft === 4) { + return dwy - 119 - leap; + } + if (mft === 5) { + return dwy - 150 - leap; + } + if (mft === 6) { + return dwy - 180 - leap; + } + if (mft === 7) { + return dwy - 211 - leap; + } + if (mft === 8) { + return dwy - 242 - leap; + } + if (mft === 9) { + return dwy - 272 - leap; + } + if (mft === 10) { + return dwy - 303 - leap; + } + if (mft === 11) { + return dwy - 333 - leap; + } + throw new Error('Invalid time'); +} +var HOURS_PER_DAY = 24; +var MINUTES_PER_HOUR = 60; +var SECONDS_PER_MINUTE = 60; +var MS_PER_SECOND = 1e3; +var MS_PER_MINUTE = MS_PER_SECOND * SECONDS_PER_MINUTE; +var MS_PER_HOUR = MS_PER_MINUTE * MINUTES_PER_HOUR; +function HourFromTime(t) { + return mod(Math.floor(t / MS_PER_HOUR), HOURS_PER_DAY); +} +function MinFromTime(t) { + return mod(Math.floor(t / MS_PER_MINUTE), MINUTES_PER_HOUR); +} +function SecFromTime(t) { + return mod(Math.floor(t / MS_PER_SECOND), SECONDS_PER_MINUTE); +} +function IsCallable(fn) { + return typeof fn === 'function'; +} +/** + * The abstract operation OrdinaryHasInstance implements + * the default algorithm for determining if an object O + * inherits from the instance object inheritance path + * provided by constructor C. + * @param C class + * @param O object + * @param internalSlots internalSlots + */ +function OrdinaryHasInstance(C, O, internalSlots) { + if (!IsCallable(C)) { + return false; + } + if (internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction) { + var BC = internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction; + return O instanceof BC; + } + if (typeof O !== 'object') { + return false; + } + var P = C.prototype; + if (typeof P !== 'object') { + throw new TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); + } + return Object.prototype.isPrototypeOf.call(P, O); +} +function msFromTime(t) { + return mod(t, MS_PER_SECOND); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ CanonicalizeLocaleList: () => (/* binding */ CanonicalizeLocaleList) +/* harmony export */ }); +/** + * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist + * @param locales + */ +function CanonicalizeLocaleList(locales) { + // TODO + return Intl.getCanonicalLocales(locales); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ CanonicalizeTimeZoneName: () => (/* binding */ CanonicalizeTimeZoneName) +/* harmony export */ }); +/** + * https://tc39.es/ecma402/#sec-canonicalizetimezonename + * @param tz + */ +function CanonicalizeTimeZoneName(tz, _a) { + var zoneNames = _a.zoneNames, uppercaseLinks = _a.uppercaseLinks; + var uppercasedTz = tz.toUpperCase(); + var uppercasedZones = zoneNames.reduce(function (all, z) { + all[z.toUpperCase()] = z; + return all; + }, {}); + var ianaTimeZone = uppercaseLinks[uppercasedTz] || uppercasedZones[uppercasedTz]; + if (ianaTimeZone === 'Etc/UTC' || ianaTimeZone === 'Etc/GMT') { + return 'UTC'; + } + return ianaTimeZone; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ CoerceOptionsToObject: () => (/* binding */ CoerceOptionsToObject) +/* harmony export */ }); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); + +/** + * https://tc39.es/ecma402/#sec-coerceoptionstoobject + * @param options + * @returns + */ +function CoerceOptionsToObject(options) { + if (typeof options === 'undefined') { + return Object.create(null); + } + return (0,_262__WEBPACK_IMPORTED_MODULE_0__.ToObject)(options); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DefaultNumberOption: () => (/* binding */ DefaultNumberOption) +/* harmony export */ }); +/** + * https://tc39.es/ecma402/#sec-defaultnumberoption + * @param val + * @param min + * @param max + * @param fallback + */ +function DefaultNumberOption(inputVal, min, max, fallback) { + if (inputVal === undefined) { + // @ts-expect-error + return fallback; + } + var val = Number(inputVal); + if (isNaN(val) || val < min || val > max) { + throw new RangeError("".concat(val, " is outside of range [").concat(min, ", ").concat(max, "]")); + } + return Math.floor(val); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js": +/*!************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ GetNumberOption: () => (/* binding */ GetNumberOption) +/* harmony export */ }); +/* harmony import */ var _DefaultNumberOption__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DefaultNumberOption */ "./node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js"); +/** + * https://tc39.es/ecma402/#sec-getnumberoption + * @param options + * @param property + * @param min + * @param max + * @param fallback + */ + +function GetNumberOption(options, property, minimum, maximum, fallback) { + var val = options[property]; + return (0,_DefaultNumberOption__WEBPACK_IMPORTED_MODULE_0__.DefaultNumberOption)(val, minimum, maximum, fallback); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js": +/*!******************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ GetOption: () => (/* binding */ GetOption) +/* harmony export */ }); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); + +/** + * https://tc39.es/ecma402/#sec-getoption + * @param opts + * @param prop + * @param type + * @param values + * @param fallback + */ +function GetOption(opts, prop, type, values, fallback) { + if (typeof opts !== 'object') { + throw new TypeError('Options must be an object'); + } + var value = opts[prop]; + if (value !== undefined) { + if (type !== 'boolean' && type !== 'string') { + throw new TypeError('invalid type'); + } + if (type === 'boolean') { + value = Boolean(value); + } + if (type === 'string') { + value = (0,_262__WEBPACK_IMPORTED_MODULE_0__.ToString)(value); + } + if (values !== undefined && !values.filter(function (val) { return val == value; }).length) { + throw new RangeError("".concat(value, " is not within ").concat(values.join(', '))); + } + return value; + } + return fallback; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ GetOptionsObject: () => (/* binding */ GetOptionsObject) +/* harmony export */ }); +/** + * https://tc39.es/ecma402/#sec-getoptionsobject + * @param options + * @returns + */ +function GetOptionsObject(options) { + if (typeof options === 'undefined') { + return Object.create(null); + } + if (typeof options === 'object') { + return options; + } + throw new TypeError('Options must be an object'); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/GetStringOrBooleanOption.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/GetStringOrBooleanOption.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ GetStringOrBooleanOption: () => (/* binding */ GetStringOrBooleanOption) +/* harmony export */ }); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); +/** + * https://tc39.es/ecma402/#sec-getstringorbooleanoption + * @param opts + * @param prop + * @param values + * @param trueValue + * @param falsyValue + * @param fallback + */ + +function GetStringOrBooleanOption(opts, prop, values, trueValue, falsyValue, fallback) { + var value = opts[prop]; + if (value === undefined) { + return fallback; + } + if (value === true) { + return trueValue; + } + var valueBoolean = Boolean(value); + if (valueBoolean === false) { + return falsyValue; + } + value = (0,_262__WEBPACK_IMPORTED_MODULE_0__.ToString)(value); + if (value === 'true' || value === 'false') { + return fallback; + } + if ((values || []).indexOf(value) === -1) { + throw new RangeError("Invalid value ".concat(value)); + } + return value; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IsSanctionedSimpleUnitIdentifier: () => (/* binding */ IsSanctionedSimpleUnitIdentifier), +/* harmony export */ SANCTIONED_UNITS: () => (/* binding */ SANCTIONED_UNITS), +/* harmony export */ SIMPLE_UNITS: () => (/* binding */ SIMPLE_UNITS), +/* harmony export */ removeUnitNamespace: () => (/* binding */ removeUnitNamespace) +/* harmony export */ }); +/** + * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers + */ +var SANCTIONED_UNITS = [ + 'angle-degree', + 'area-acre', + 'area-hectare', + 'concentr-percent', + 'digital-bit', + 'digital-byte', + 'digital-gigabit', + 'digital-gigabyte', + 'digital-kilobit', + 'digital-kilobyte', + 'digital-megabit', + 'digital-megabyte', + 'digital-petabyte', + 'digital-terabit', + 'digital-terabyte', + 'duration-day', + 'duration-hour', + 'duration-millisecond', + 'duration-minute', + 'duration-month', + 'duration-second', + 'duration-week', + 'duration-year', + 'length-centimeter', + 'length-foot', + 'length-inch', + 'length-kilometer', + 'length-meter', + 'length-mile-scandinavian', + 'length-mile', + 'length-millimeter', + 'length-yard', + 'mass-gram', + 'mass-kilogram', + 'mass-ounce', + 'mass-pound', + 'mass-stone', + 'temperature-celsius', + 'temperature-fahrenheit', + 'volume-fluid-ounce', + 'volume-gallon', + 'volume-liter', + 'volume-milliliter', +]; +// In CLDR, the unit name always follows the form `namespace-unit` pattern. +// For example: `digital-bit` instead of `bit`. This function removes the namespace prefix. +function removeUnitNamespace(unit) { + return unit.slice(unit.indexOf('-') + 1); +} +/** + * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers + */ +var SIMPLE_UNITS = SANCTIONED_UNITS.map(removeUnitNamespace); +/** + * https://tc39.es/ecma402/#sec-issanctionedsimpleunitidentifier + */ +function IsSanctionedSimpleUnitIdentifier(unitIdentifier) { + return SIMPLE_UNITS.indexOf(unitIdentifier) > -1; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IsValidTimeZoneName: () => (/* binding */ IsValidTimeZoneName) +/* harmony export */ }); +/** + * https://tc39.es/ecma402/#sec-isvalidtimezonename + * @param tz + * @param implDetails implementation details + */ +function IsValidTimeZoneName(tz, _a) { + var zoneNamesFromData = _a.zoneNamesFromData, uppercaseLinks = _a.uppercaseLinks; + var uppercasedTz = tz.toUpperCase(); + var zoneNames = new Set(); + var linkNames = new Set(); + zoneNamesFromData.map(function (z) { return z.toUpperCase(); }).forEach(function (z) { return zoneNames.add(z); }); + Object.keys(uppercaseLinks).forEach(function (linkName) { + linkNames.add(linkName.toUpperCase()); + zoneNames.add(uppercaseLinks[linkName].toUpperCase()); + }); + return zoneNames.has(uppercasedTz) || linkNames.has(uppercasedTz); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IsWellFormedCurrencyCode: () => (/* binding */ IsWellFormedCurrencyCode) +/* harmony export */ }); +/** + * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping + * @param str string to convert + */ +function toUpperCase(str) { + return str.replace(/([a-z])/g, function (_, c) { return c.toUpperCase(); }); +} +var NOT_A_Z_REGEX = /[^A-Z]/; +/** + * https://tc39.es/ecma402/#sec-iswellformedcurrencycode + */ +function IsWellFormedCurrencyCode(currency) { + currency = toUpperCase(currency); + if (currency.length !== 3) { + return false; + } + if (NOT_A_Z_REGEX.test(currency)) { + return false; + } + return true; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IsWellFormedUnitIdentifier: () => (/* binding */ IsWellFormedUnitIdentifier) +/* harmony export */ }); +/* harmony import */ var _IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IsSanctionedSimpleUnitIdentifier */ "./node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js"); + +/** + * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping + * @param str string to convert + */ +function toLowerCase(str) { + return str.replace(/([A-Z])/g, function (_, c) { return c.toLowerCase(); }); +} +/** + * https://tc39.es/ecma402/#sec-iswellformedunitidentifier + * @param unit + */ +function IsWellFormedUnitIdentifier(unit) { + unit = toLowerCase(unit); + if ((0,_IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_0__.IsSanctionedSimpleUnitIdentifier)(unit)) { + return true; + } + var units = unit.split('-per-'); + if (units.length !== 2) { + return false; + } + var numerator = units[0], denominator = units[1]; + if (!(0,_IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_0__.IsSanctionedSimpleUnitIdentifier)(numerator) || + !(0,_IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_0__.IsSanctionedSimpleUnitIdentifier)(denominator)) { + return false; + } + return true; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ApplyUnsignedRoundingMode.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ApplyUnsignedRoundingMode.js ***! + \***********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ApplyUnsignedRoundingMode: () => (/* binding */ ApplyUnsignedRoundingMode) +/* harmony export */ }); +function ApplyUnsignedRoundingMode(x, r1, r2, unsignedRoundingMode) { + if (x === r1) + return r1; + if (unsignedRoundingMode === undefined) { + throw new Error('unsignedRoundingMode is mandatory'); + } + if (unsignedRoundingMode === 'zero') { + return r1; + } + if (unsignedRoundingMode === 'infinity') { + return r2; + } + var d1 = x - r1; + var d2 = r2 - x; + if (d1 < d2) { + return r1; + } + if (d2 < d1) { + return r2; + } + if (d1 !== d2) { + throw new Error('Unexpected error'); + } + if (unsignedRoundingMode === 'half-zero') { + return r1; + } + if (unsignedRoundingMode === 'half-infinity') { + return r2; + } + if (unsignedRoundingMode !== 'half-even') { + throw new Error("Unexpected value for unsignedRoundingMode: ".concat(unsignedRoundingMode)); + } + var cardinality = (r1 / (r2 - r1)) % 2; + if (cardinality === 0) { + return r1; + } + return r2; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CollapseNumberRange.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CollapseNumberRange.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ CollapseNumberRange: () => (/* binding */ CollapseNumberRange) +/* harmony export */ }); +/** + * https://tc39.es/ecma402/#sec-collapsenumberrange + */ +function CollapseNumberRange(result) { + return result; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js ***! + \*************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ComputeExponent: () => (/* binding */ ComputeExponent) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./node_modules/@formatjs/ecma402-abstract/lib/utils.js"); +/* harmony import */ var _ComputeExponentForMagnitude__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ComputeExponentForMagnitude */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js"); +/* harmony import */ var _FormatNumericToString__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FormatNumericToString */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js"); + + + +/** + * The abstract operation ComputeExponent computes an exponent (power of ten) by which to scale x + * according to the number formatting settings. It handles cases such as 999 rounding up to 1000, + * requiring a different exponent. + * + * NOT IN SPEC: it returns [exponent, magnitude]. + */ +function ComputeExponent(numberFormat, x, _a) { + var getInternalSlots = _a.getInternalSlots; + if (x === 0) { + return [0, 0]; + } + if (x < 0) { + x = -x; + } + var magnitude = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getMagnitude)(x); + var exponent = (0,_ComputeExponentForMagnitude__WEBPACK_IMPORTED_MODULE_1__.ComputeExponentForMagnitude)(numberFormat, magnitude, { + getInternalSlots: getInternalSlots, + }); + // Preserve more precision by doing multiplication when exponent is negative. + x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent); + var formatNumberResult = (0,_FormatNumericToString__WEBPACK_IMPORTED_MODULE_2__.FormatNumericToString)(getInternalSlots(numberFormat), x); + if (formatNumberResult.roundedNumber === 0) { + return [exponent, magnitude]; + } + var newMagnitude = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getMagnitude)(formatNumberResult.roundedNumber); + if (newMagnitude === magnitude - exponent) { + return [exponent, magnitude]; + } + return [ + (0,_ComputeExponentForMagnitude__WEBPACK_IMPORTED_MODULE_1__.ComputeExponentForMagnitude)(numberFormat, magnitude + 1, { + getInternalSlots: getInternalSlots, + }), + magnitude + 1, + ]; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js ***! + \*************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ComputeExponentForMagnitude: () => (/* binding */ ComputeExponentForMagnitude) +/* harmony export */ }); +/** + * The abstract operation ComputeExponentForMagnitude computes an exponent by which to scale a + * number of the given magnitude (power of ten of the most significant digit) according to the + * locale and the desired notation (scientific, engineering, or compact). + */ +function ComputeExponentForMagnitude(numberFormat, magnitude, _a) { + var getInternalSlots = _a.getInternalSlots; + var internalSlots = getInternalSlots(numberFormat); + var notation = internalSlots.notation, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem; + switch (notation) { + case 'standard': + return 0; + case 'scientific': + return magnitude; + case 'engineering': + return Math.floor(magnitude / 3) * 3; + default: { + // Let exponent be an implementation- and locale-dependent (ILD) integer by which to scale a + // number of the given magnitude in compact notation for the current locale. + var compactDisplay = internalSlots.compactDisplay, style = internalSlots.style, currencyDisplay = internalSlots.currencyDisplay; + var thresholdMap = void 0; + if (style === 'currency' && currencyDisplay !== 'name') { + var currency = dataLocaleData.numbers.currency[numberingSystem] || + dataLocaleData.numbers.currency[dataLocaleData.numbers.nu[0]]; + thresholdMap = currency.short; + } + else { + var decimal = dataLocaleData.numbers.decimal[numberingSystem] || + dataLocaleData.numbers.decimal[dataLocaleData.numbers.nu[0]]; + thresholdMap = compactDisplay === 'long' ? decimal.long : decimal.short; + } + if (!thresholdMap) { + return 0; + } + var num = String(Math.pow(10, magnitude)); + var thresholds = Object.keys(thresholdMap); // TODO: this can be pre-processed + if (num < thresholds[0]) { + return 0; + } + if (num > thresholds[thresholds.length - 1]) { + return thresholds[thresholds.length - 1].length - 1; + } + var i = thresholds.indexOf(num); + if (i === -1) { + return 0; + } + // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats + // Special handling if the pattern is precisely `0`. + var magnitudeKey = thresholds[i]; + // TODO: do we need to handle plural here? + var compactPattern = thresholdMap[magnitudeKey].other; + if (compactPattern === '0') { + return 0; + } + // Example: in zh-TW, `10000000` maps to `0000萬`. So we need to return 8 - 4 = 4 here. + return (magnitudeKey.length - + thresholdMap[magnitudeKey].other.match(/0+/)[0].length); + } + } +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js": +/*!************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js ***! + \************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ CurrencyDigits: () => (/* binding */ CurrencyDigits) +/* harmony export */ }); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); + +/** + * https://tc39.es/ecma402/#sec-currencydigits + */ +function CurrencyDigits(c, _a) { + var currencyDigitsData = _a.currencyDigitsData; + return (0,_262__WEBPACK_IMPORTED_MODULE_0__.HasOwnProperty)(currencyDigitsData, c) + ? currencyDigitsData[c] + : 2; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatApproximately.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatApproximately.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FormatApproximately: () => (/* binding */ FormatApproximately) +/* harmony export */ }); +/** + * https://tc39.es/ecma402/#sec-formatapproximately + */ +function FormatApproximately(numberFormat, result, _a) { + var getInternalSlots = _a.getInternalSlots; + var internalSlots = getInternalSlots(numberFormat); + var symbols = internalSlots.dataLocaleData.numbers.symbols[internalSlots.numberingSystem]; + var approximatelySign = symbols.approximatelySign; + result.push({ type: 'approximatelySign', value: approximatelySign }); + return result; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRange.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRange.js ***! + \****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FormatNumericRange: () => (/* binding */ FormatNumericRange) +/* harmony export */ }); +/* harmony import */ var _PartitionNumberRangePattern__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PartitionNumberRangePattern */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberRangePattern.js"); + +/** + * https://tc39.es/ecma402/#sec-formatnumericrange + */ +function FormatNumericRange(numberFormat, x, y, _a) { + var getInternalSlots = _a.getInternalSlots; + var parts = (0,_PartitionNumberRangePattern__WEBPACK_IMPORTED_MODULE_0__.PartitionNumberRangePattern)(numberFormat, x, y, { + getInternalSlots: getInternalSlots, + }); + return parts.map(function (part) { return part.value; }).join(''); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRangeToParts.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRangeToParts.js ***! + \***********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FormatNumericRangeToParts: () => (/* binding */ FormatNumericRangeToParts) +/* harmony export */ }); +/* harmony import */ var _PartitionNumberRangePattern__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PartitionNumberRangePattern */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberRangePattern.js"); + +/** + * https://tc39.es/ecma402/#sec-formatnumericrangetoparts + */ +function FormatNumericRangeToParts(numberFormat, x, y, _a) { + var getInternalSlots = _a.getInternalSlots; + var parts = (0,_PartitionNumberRangePattern__WEBPACK_IMPORTED_MODULE_0__.PartitionNumberRangePattern)(numberFormat, x, y, { + getInternalSlots: getInternalSlots, + }); + return parts.map(function (part, index) { return ({ + type: part.type, + value: part.value, + source: part.source, + result: index.toString(), + }); }); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js": +/*!******************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js ***! + \******************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FormatNumericToParts: () => (/* binding */ FormatNumericToParts) +/* harmony export */ }); +/* harmony import */ var _PartitionNumberPattern__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PartitionNumberPattern */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js"); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); + + +function FormatNumericToParts(nf, x, implDetails) { + var parts = (0,_PartitionNumberPattern__WEBPACK_IMPORTED_MODULE_0__.PartitionNumberPattern)(nf, x, implDetails); + var result = (0,_262__WEBPACK_IMPORTED_MODULE_1__.ArrayCreate)(0); + for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) { + var part = parts_1[_i]; + result.push({ + type: part.type, + value: part.value, + }); + } + return result; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js": +/*!*******************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js ***! + \*******************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FormatNumericToString: () => (/* binding */ FormatNumericToString) +/* harmony export */ }); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); +/* harmony import */ var _ToRawPrecision__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ToRawPrecision */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./node_modules/@formatjs/ecma402-abstract/lib/utils.js"); +/* harmony import */ var _ToRawFixed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ToRawFixed */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js"); + + + + +/** + * https://tc39.es/ecma402/#sec-formatnumberstring + */ +function FormatNumericToString(intlObject, x) { + var isNegative = x < 0 || (0,_262__WEBPACK_IMPORTED_MODULE_0__.SameValue)(x, -0); + if (isNegative) { + x = -x; + } + var result; + var rourndingType = intlObject.roundingType; + switch (rourndingType) { + case 'significantDigits': + result = (0,_ToRawPrecision__WEBPACK_IMPORTED_MODULE_1__.ToRawPrecision)(x, intlObject.minimumSignificantDigits, intlObject.maximumSignificantDigits); + break; + case 'fractionDigits': + result = (0,_ToRawFixed__WEBPACK_IMPORTED_MODULE_2__.ToRawFixed)(x, intlObject.minimumFractionDigits, intlObject.maximumFractionDigits); + break; + default: + result = (0,_ToRawPrecision__WEBPACK_IMPORTED_MODULE_1__.ToRawPrecision)(x, 1, 2); + if (result.integerDigitsCount > 1) { + result = (0,_ToRawFixed__WEBPACK_IMPORTED_MODULE_2__.ToRawFixed)(x, 0, 0); + } + break; + } + x = result.roundedNumber; + var string = result.formattedString; + var int = result.integerDigitsCount; + var minInteger = intlObject.minimumIntegerDigits; + if (int < minInteger) { + var forwardZeros = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.repeat)('0', minInteger - int); + string = forwardZeros + string; + } + if (isNegative) { + x = -x; + } + return { roundedNumber: x, formattedString: string }; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/GetUnsignedRoundingMode.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/GetUnsignedRoundingMode.js ***! + \*********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ GetUnsignedRoundingMode: () => (/* binding */ GetUnsignedRoundingMode) +/* harmony export */ }); +var negativeMapping = { + ceil: 'zero', + floor: 'infinity', + expand: 'infinity', + trunc: 'zero', + halfCeil: 'half-zero', + halfFloor: 'half-infinity', + halfExpand: 'half-infinity', + halfTrunc: 'half-zero', + halfEven: 'half-even', +}; +var positiveMapping = { + ceil: 'infinity', + floor: 'zero', + expand: 'infinity', + trunc: 'zero', + halfCeil: 'half-infinity', + halfFloor: 'half-zero', + halfExpand: 'half-infinity', + halfTrunc: 'half-zero', + halfEven: 'half-even', +}; +function GetUnsignedRoundingMode(roundingMode, isNegative) { + if (isNegative) { + return negativeMapping[roundingMode]; + } + return positiveMapping[roundingMode]; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js ***! + \********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ InitializeNumberFormat: () => (/* binding */ InitializeNumberFormat) +/* harmony export */ }); +/* harmony import */ var _formatjs_intl_localematcher__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @formatjs/intl-localematcher */ "./node_modules/@formatjs/intl-localematcher/lib/index.js"); +/* harmony import */ var _CanonicalizeLocaleList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../CanonicalizeLocaleList */ "./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js"); +/* harmony import */ var _CoerceOptionsToObject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../CoerceOptionsToObject */ "./node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js"); +/* harmony import */ var _GetNumberOption__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../GetNumberOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js"); +/* harmony import */ var _GetOption__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../GetOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js"); +/* harmony import */ var _GetStringOrBooleanOption__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../GetStringOrBooleanOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetStringOrBooleanOption.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ "./node_modules/@formatjs/ecma402-abstract/lib/utils.js"); +/* harmony import */ var _CurrencyDigits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./CurrencyDigits */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js"); +/* harmony import */ var _SetNumberFormatDigitOptions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./SetNumberFormatDigitOptions */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js"); +/* harmony import */ var _SetNumberFormatUnitOptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./SetNumberFormatUnitOptions */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js"); + + + + + + + + + + +var VALID_ROUND_INCREMENT_VALUES = [ + 1, 2, 5, 10, 20, 25, 50, 100, 200, 250, 500, 1000, 2000, +]; +/** + * https://tc39.es/ecma402/#sec-initializenumberformat + */ +function InitializeNumberFormat(nf, locales, opts, _a) { + var getInternalSlots = _a.getInternalSlots, localeData = _a.localeData, availableLocales = _a.availableLocales, numberingSystemNames = _a.numberingSystemNames, getDefaultLocale = _a.getDefaultLocale, currencyDigitsData = _a.currencyDigitsData; + // @ts-ignore + var requestedLocales = (0,_CanonicalizeLocaleList__WEBPACK_IMPORTED_MODULE_1__.CanonicalizeLocaleList)(locales); + var options = (0,_CoerceOptionsToObject__WEBPACK_IMPORTED_MODULE_2__.CoerceOptionsToObject)(opts); + var opt = Object.create(null); + var matcher = (0,_GetOption__WEBPACK_IMPORTED_MODULE_3__.GetOption)(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit'); + opt.localeMatcher = matcher; + var numberingSystem = (0,_GetOption__WEBPACK_IMPORTED_MODULE_3__.GetOption)(options, 'numberingSystem', 'string', undefined, undefined); + if (numberingSystem !== undefined && + numberingSystemNames.indexOf(numberingSystem) < 0) { + // 8.a. If numberingSystem does not match the Unicode Locale Identifier type nonterminal, + // throw a RangeError exception. + throw RangeError("Invalid numberingSystems: ".concat(numberingSystem)); + } + opt.nu = numberingSystem; + var r = (0,_formatjs_intl_localematcher__WEBPACK_IMPORTED_MODULE_0__.ResolveLocale)(Array.from(availableLocales), requestedLocales, opt, + // [[RelevantExtensionKeys]] slot, which is a constant + ['nu'], localeData, getDefaultLocale); + var dataLocaleData = localeData[r.dataLocale]; + (0,_utils__WEBPACK_IMPORTED_MODULE_4__.invariant)(!!dataLocaleData, "Missing locale data for ".concat(r.dataLocale)); + var internalSlots = getInternalSlots(nf); + internalSlots.locale = r.locale; + internalSlots.dataLocale = r.dataLocale; + internalSlots.numberingSystem = r.nu; + internalSlots.dataLocaleData = dataLocaleData; + (0,_SetNumberFormatUnitOptions__WEBPACK_IMPORTED_MODULE_5__.SetNumberFormatUnitOptions)(nf, options, { getInternalSlots: getInternalSlots }); + var style = internalSlots.style; + var mnfdDefault; + var mxfdDefault; + if (style === 'currency') { + var currency = internalSlots.currency; + var cDigits = (0,_CurrencyDigits__WEBPACK_IMPORTED_MODULE_6__.CurrencyDigits)(currency, { currencyDigitsData: currencyDigitsData }); + mnfdDefault = cDigits; + mxfdDefault = cDigits; + } + else { + mnfdDefault = 0; + mxfdDefault = style === 'percent' ? 0 : 3; + } + var notation = (0,_GetOption__WEBPACK_IMPORTED_MODULE_3__.GetOption)(options, 'notation', 'string', ['standard', 'scientific', 'engineering', 'compact'], 'standard'); + internalSlots.notation = notation; + (0,_SetNumberFormatDigitOptions__WEBPACK_IMPORTED_MODULE_7__.SetNumberFormatDigitOptions)(internalSlots, options, mnfdDefault, mxfdDefault, notation); + var roundingIncrement = (0,_GetNumberOption__WEBPACK_IMPORTED_MODULE_8__.GetNumberOption)(options, 'roundingIncrement', 1, 5000, 1); + if (VALID_ROUND_INCREMENT_VALUES.indexOf(roundingIncrement) === -1) { + throw new RangeError("Invalid rounding increment value: ".concat(roundingIncrement, ".\nValid values are ").concat(VALID_ROUND_INCREMENT_VALUES, ".")); + } + if (roundingIncrement !== 1 && + internalSlots.roundingType !== 'fractionDigits') { + throw new TypeError("For roundingIncrement > 1 only fractionDigits is a valid roundingType"); + } + if (roundingIncrement !== 1 && + internalSlots.maximumFractionDigits !== internalSlots.minimumFractionDigits) { + throw new RangeError('With roundingIncrement > 1, maximumFractionDigits and minimumFractionDigits must be equal.'); + } + internalSlots.roundingIncrement = roundingIncrement; + var trailingZeroDisplay = (0,_GetOption__WEBPACK_IMPORTED_MODULE_3__.GetOption)(options, 'trailingZeroDisplay', 'string', ['auto', 'stripIfInteger'], 'auto'); + internalSlots.trailingZeroDisplay = trailingZeroDisplay; + var compactDisplay = (0,_GetOption__WEBPACK_IMPORTED_MODULE_3__.GetOption)(options, 'compactDisplay', 'string', ['short', 'long'], 'short'); + var defaultUseGrouping = 'auto'; + if (notation === 'compact') { + internalSlots.compactDisplay = compactDisplay; + defaultUseGrouping = 'min2'; + } + internalSlots.useGrouping = (0,_GetStringOrBooleanOption__WEBPACK_IMPORTED_MODULE_9__.GetStringOrBooleanOption)(options, 'useGrouping', ['min2', 'auto', 'always'], 'always', false, defaultUseGrouping); + internalSlots.signDisplay = (0,_GetOption__WEBPACK_IMPORTED_MODULE_3__.GetOption)(options, 'signDisplay', 'string', ['auto', 'never', 'always', 'exceptZero', 'negative'], 'auto'); + internalSlots.roundingMode = (0,_GetOption__WEBPACK_IMPORTED_MODULE_3__.GetOption)(options, 'roundingMode', 'string', [ + 'ceil', + 'floor', + 'expand', + 'trunc', + 'halfCeil', + 'halfFloor', + 'halfExpand', + 'halfTrunc', + 'halfEven', + ], 'halfExpand'); + return nf; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js ***! + \********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PartitionNumberPattern: () => (/* binding */ PartitionNumberPattern) +/* harmony export */ }); +/* harmony import */ var _FormatNumericToString__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FormatNumericToString */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js"); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); +/* harmony import */ var _ComputeExponent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ComputeExponent */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js"); +/* harmony import */ var _format_to_parts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./format_to_parts */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js"); + + + + +/** + * https://tc39.es/ecma402/#sec-formatnumberstring + */ +function PartitionNumberPattern(numberFormat, x, _a) { + var _b; + var getInternalSlots = _a.getInternalSlots; + var internalSlots = getInternalSlots(numberFormat); + var pl = internalSlots.pl, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem; + var symbols = dataLocaleData.numbers.symbols[numberingSystem] || + dataLocaleData.numbers.symbols[dataLocaleData.numbers.nu[0]]; + var magnitude = 0; + var exponent = 0; + var n; + if (isNaN(x)) { + n = symbols.nan; + } + else if (x == Number.POSITIVE_INFINITY || x == Number.NEGATIVE_INFINITY) { + n = symbols.infinity; + } + else { + if (!(0,_262__WEBPACK_IMPORTED_MODULE_0__.SameValue)(x, -0)) { + if (!isFinite(x)) { + throw new Error('Input must be a mathematical value'); + } + if (internalSlots.style == 'percent') { + x *= 100; + } + ; + _b = (0,_ComputeExponent__WEBPACK_IMPORTED_MODULE_1__.ComputeExponent)(numberFormat, x, { + getInternalSlots: getInternalSlots, + }), exponent = _b[0], magnitude = _b[1]; + // Preserve more precision by doing multiplication when exponent is negative. + x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent); + } + var formatNumberResult = (0,_FormatNumericToString__WEBPACK_IMPORTED_MODULE_2__.FormatNumericToString)(internalSlots, x); + n = formatNumberResult.formattedString; + x = formatNumberResult.roundedNumber; + } + // Based on https://tc39.es/ecma402/#sec-getnumberformatpattern + // We need to do this before `x` is rounded. + var sign; + var signDisplay = internalSlots.signDisplay; + switch (signDisplay) { + case 'never': + sign = 0; + break; + case 'auto': + if ((0,_262__WEBPACK_IMPORTED_MODULE_0__.SameValue)(x, 0) || x > 0 || isNaN(x)) { + sign = 0; + } + else { + sign = -1; + } + break; + case 'always': + if ((0,_262__WEBPACK_IMPORTED_MODULE_0__.SameValue)(x, 0) || x > 0 || isNaN(x)) { + sign = 1; + } + else { + sign = -1; + } + break; + default: + // x === 0 -> x is 0 or x is -0 + if (x === 0 || isNaN(x)) { + sign = 0; + } + else if (x > 0) { + sign = 1; + } + else { + sign = -1; + } + } + return (0,_format_to_parts__WEBPACK_IMPORTED_MODULE_3__["default"])({ roundedNumber: x, formattedString: n, exponent: exponent, magnitude: magnitude, sign: sign }, internalSlots.dataLocaleData, pl, internalSlots); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberRangePattern.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberRangePattern.js ***! + \*************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PartitionNumberRangePattern: () => (/* binding */ PartitionNumberRangePattern) +/* harmony export */ }); +/* harmony import */ var _PartitionNumberPattern__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PartitionNumberPattern */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js"); +/* harmony import */ var _CollapseNumberRange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CollapseNumberRange */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CollapseNumberRange.js"); +/* harmony import */ var _FormatApproximately__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormatApproximately */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatApproximately.js"); + + + +/** + * https://tc39.es/ecma402/#sec-partitionnumberrangepattern + */ +function PartitionNumberRangePattern(numberFormat, x, y, _a) { + var getInternalSlots = _a.getInternalSlots; + if (isNaN(x) || isNaN(y)) { + throw new RangeError('Input must be a number'); + } + var result = []; + var xResult = (0,_PartitionNumberPattern__WEBPACK_IMPORTED_MODULE_0__.PartitionNumberPattern)(numberFormat, x, { getInternalSlots: getInternalSlots }); + var yResult = (0,_PartitionNumberPattern__WEBPACK_IMPORTED_MODULE_0__.PartitionNumberPattern)(numberFormat, y, { getInternalSlots: getInternalSlots }); + if (xResult === yResult) { + return (0,_FormatApproximately__WEBPACK_IMPORTED_MODULE_1__.FormatApproximately)(numberFormat, xResult, { getInternalSlots: getInternalSlots }); + } + for (var _i = 0, xResult_1 = xResult; _i < xResult_1.length; _i++) { + var r = xResult_1[_i]; + r.source = 'startRange'; + } + result = result.concat(xResult); + var internalSlots = getInternalSlots(numberFormat); + var symbols = internalSlots.dataLocaleData.numbers.symbols[internalSlots.numberingSystem]; + result.push({ type: 'literal', value: symbols.rangeSign, source: 'shared' }); + for (var _b = 0, yResult_1 = yResult; _b < yResult_1.length; _b++) { + var r = yResult_1[_b]; + r.source = 'endRange'; + } + result = result.concat(yResult); + return (0,_CollapseNumberRange__WEBPACK_IMPORTED_MODULE_2__.CollapseNumberRange)(result); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js ***! + \*************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SetNumberFormatDigitOptions: () => (/* binding */ SetNumberFormatDigitOptions) +/* harmony export */ }); +/* harmony import */ var _DefaultNumberOption__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../DefaultNumberOption */ "./node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js"); +/* harmony import */ var _GetNumberOption__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GetNumberOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js"); +/* harmony import */ var _GetOption__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../GetOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js"); + + + +/** + * https://tc39.es/ecma402/#sec-setnfdigitoptions + */ +function SetNumberFormatDigitOptions(internalSlots, opts, mnfdDefault, mxfdDefault, notation) { + var mnid = (0,_GetNumberOption__WEBPACK_IMPORTED_MODULE_0__.GetNumberOption)(opts, 'minimumIntegerDigits', 1, 21, 1); + var mnfd = opts.minimumFractionDigits; + var mxfd = opts.maximumFractionDigits; + var mnsd = opts.minimumSignificantDigits; + var mxsd = opts.maximumSignificantDigits; + internalSlots.minimumIntegerDigits = mnid; + var roundingPriority = (0,_GetOption__WEBPACK_IMPORTED_MODULE_1__.GetOption)(opts, 'roundingPriority', 'string', ['auto', 'morePrecision', 'lessPrecision'], 'auto'); + var hasSd = mnsd !== undefined || mxsd !== undefined; + var hasFd = mnfd !== undefined || mxfd !== undefined; + var needSd = true; + var needFd = true; + if (roundingPriority === 'auto') { + needSd = hasSd; + if (hasSd || (!hasFd && notation === 'compact')) { + needFd = false; + } + } + if (needSd) { + if (hasSd) { + mnsd = (0,_DefaultNumberOption__WEBPACK_IMPORTED_MODULE_2__.DefaultNumberOption)(mnsd, 1, 21, 1); + mxsd = (0,_DefaultNumberOption__WEBPACK_IMPORTED_MODULE_2__.DefaultNumberOption)(mxsd, mnsd, 21, 21); + internalSlots.minimumSignificantDigits = mnsd; + internalSlots.maximumSignificantDigits = mxsd; + } + else { + internalSlots.minimumSignificantDigits = 1; + internalSlots.maximumSignificantDigits = 21; + } + } + if (needFd) { + if (hasFd) { + mnfd = (0,_DefaultNumberOption__WEBPACK_IMPORTED_MODULE_2__.DefaultNumberOption)(mnfd, 0, 20, undefined); + mxfd = (0,_DefaultNumberOption__WEBPACK_IMPORTED_MODULE_2__.DefaultNumberOption)(mxfd, 0, 20, undefined); + if (mnfd === undefined) { + // @ts-expect-error + mnfd = Math.min(mnfdDefault, mxfd); + } + else if (mxfd === undefined) { + mxfd = Math.max(mxfdDefault, mnfd); + } + else if (mnfd > mxfd) { + throw new RangeError("Invalid range, ".concat(mnfd, " > ").concat(mxfd)); + } + internalSlots.minimumFractionDigits = mnfd; + internalSlots.maximumFractionDigits = mxfd; + } + else { + internalSlots.minimumFractionDigits = mnfdDefault; + internalSlots.maximumFractionDigits = mxfdDefault; + } + } + if (needSd || needFd) { + if (roundingPriority === 'morePrecision') { + internalSlots.roundingType = 'morePrecision'; + } + else if (roundingPriority === 'lessPrecision') { + internalSlots.roundingType = 'lessPrecision'; + } + else if (hasSd) { + internalSlots.roundingType = 'significantDigits'; + } + else { + internalSlots.roundingType = 'fractionDigits'; + } + } + else { + internalSlots.roundingType = 'morePrecision'; + internalSlots.minimumFractionDigits = 0; + internalSlots.maximumFractionDigits = 0; + internalSlots.minimumSignificantDigits = 1; + internalSlots.maximumSignificantDigits = 2; + } +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js ***! + \************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SetNumberFormatUnitOptions: () => (/* binding */ SetNumberFormatUnitOptions) +/* harmony export */ }); +/* harmony import */ var _GetOption__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GetOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js"); +/* harmony import */ var _IsWellFormedCurrencyCode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../IsWellFormedCurrencyCode */ "./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js"); +/* harmony import */ var _IsWellFormedUnitIdentifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../IsWellFormedUnitIdentifier */ "./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js"); + + + +/** + * https://tc39.es/ecma402/#sec-setnumberformatunitoptions + */ +function SetNumberFormatUnitOptions(nf, options, _a) { + if (options === void 0) { options = Object.create(null); } + var getInternalSlots = _a.getInternalSlots; + var internalSlots = getInternalSlots(nf); + var style = (0,_GetOption__WEBPACK_IMPORTED_MODULE_0__.GetOption)(options, 'style', 'string', ['decimal', 'percent', 'currency', 'unit'], 'decimal'); + internalSlots.style = style; + var currency = (0,_GetOption__WEBPACK_IMPORTED_MODULE_0__.GetOption)(options, 'currency', 'string', undefined, undefined); + if (currency !== undefined && !(0,_IsWellFormedCurrencyCode__WEBPACK_IMPORTED_MODULE_1__.IsWellFormedCurrencyCode)(currency)) { + throw RangeError('Malformed currency code'); + } + if (style === 'currency' && currency === undefined) { + throw TypeError('currency cannot be undefined'); + } + var currencyDisplay = (0,_GetOption__WEBPACK_IMPORTED_MODULE_0__.GetOption)(options, 'currencyDisplay', 'string', ['code', 'symbol', 'narrowSymbol', 'name'], 'symbol'); + var currencySign = (0,_GetOption__WEBPACK_IMPORTED_MODULE_0__.GetOption)(options, 'currencySign', 'string', ['standard', 'accounting'], 'standard'); + var unit = (0,_GetOption__WEBPACK_IMPORTED_MODULE_0__.GetOption)(options, 'unit', 'string', undefined, undefined); + if (unit !== undefined && !(0,_IsWellFormedUnitIdentifier__WEBPACK_IMPORTED_MODULE_2__.IsWellFormedUnitIdentifier)(unit)) { + throw RangeError('Invalid unit argument for Intl.NumberFormat()'); + } + if (style === 'unit' && unit === undefined) { + throw TypeError('unit cannot be undefined'); + } + var unitDisplay = (0,_GetOption__WEBPACK_IMPORTED_MODULE_0__.GetOption)(options, 'unitDisplay', 'string', ['short', 'narrow', 'long'], 'short'); + if (style === 'currency') { + internalSlots.currency = currency.toUpperCase(); + internalSlots.currencyDisplay = currencyDisplay; + internalSlots.currencySign = currencySign; + } + if (style === 'unit') { + internalSlots.unit = unit; + internalSlots.unitDisplay = unitDisplay; + } +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ToRawFixed: () => (/* binding */ ToRawFixed) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./node_modules/@formatjs/ecma402-abstract/lib/utils.js"); + +/** + * TODO: dedup with intl-pluralrules and support BigInt + * https://tc39.es/ecma402/#sec-torawfixed + * @param x a finite non-negative Number or BigInt + * @param minFraction and integer between 0 and 20 + * @param maxFraction and integer between 0 and 20 + */ +function ToRawFixed(x, minFraction, maxFraction) { + var f = maxFraction; + var n = Math.round(x * Math.pow(10, f)); + var xFinal = n / Math.pow(10, f); + // n is a positive integer, but it is possible to be greater than 1e21. + // In such case we will go the slow path. + // See also: https://tc39.es/ecma262/#sec-numeric-types-number-tostring + var m; + if (n < 1e21) { + m = n.toString(); + } + else { + m = n.toString(); + var _a = m.split('e'), mantissa = _a[0], exponent = _a[1]; + m = mantissa.replace('.', ''); + m = m + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.repeat)('0', Math.max(+exponent - m.length + 1, 0)); + } + var int; + if (f !== 0) { + var k = m.length; + if (k <= f) { + var z = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.repeat)('0', f + 1 - k); + m = z + m; + k = f + 1; + } + var a = m.slice(0, k - f); + var b = m.slice(k - f); + m = "".concat(a, ".").concat(b); + int = a.length; + } + else { + int = m.length; + } + var cut = maxFraction - minFraction; + while (cut > 0 && m[m.length - 1] === '0') { + m = m.slice(0, -1); + cut--; + } + if (m[m.length - 1] === '.') { + m = m.slice(0, -1); + } + return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int }; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js": +/*!************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js ***! + \************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ToRawPrecision: () => (/* binding */ ToRawPrecision) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./node_modules/@formatjs/ecma402-abstract/lib/utils.js"); + +function ToRawPrecision(x, minPrecision, maxPrecision) { + var p = maxPrecision; + var m; + var e; + var xFinal; + if (x === 0) { + m = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.repeat)('0', p); + e = 0; + xFinal = 0; + } + else { + var xToString = x.toString(); + // If xToString is formatted as scientific notation, the number is either very small or very + // large. If the precision of the formatted string is lower that requested max precision, we + // should still infer them from the formatted string, otherwise the formatted result might have + // precision loss (e.g. 1e41 will not have 0 in every trailing digits). + var xToStringExponentIndex = xToString.indexOf('e'); + var _a = xToString.split('e'), xToStringMantissa = _a[0], xToStringExponent = _a[1]; + var xToStringMantissaWithoutDecimalPoint = xToStringMantissa.replace('.', ''); + if (xToStringExponentIndex >= 0 && + xToStringMantissaWithoutDecimalPoint.length <= p) { + e = +xToStringExponent; + m = + xToStringMantissaWithoutDecimalPoint + + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.repeat)('0', p - xToStringMantissaWithoutDecimalPoint.length); + xFinal = x; + } + else { + e = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getMagnitude)(x); + var decimalPlaceOffset = e - p + 1; + // n is the integer containing the required precision digits. To derive the formatted string, + // we will adjust its decimal place in the logic below. + var n = Math.round(adjustDecimalPlace(x, decimalPlaceOffset)); + // The rounding caused the change of magnitude, so we should increment `e` by 1. + if (adjustDecimalPlace(n, p - 1) >= 10) { + e = e + 1; + // Divide n by 10 to swallow one precision. + n = Math.floor(n / 10); + } + m = n.toString(); + // Equivalent of n * 10 ** (e - p + 1) + xFinal = adjustDecimalPlace(n, p - 1 - e); + } + } + var int; + if (e >= p - 1) { + m = m + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.repeat)('0', e - p + 1); + int = e + 1; + } + else if (e >= 0) { + m = "".concat(m.slice(0, e + 1), ".").concat(m.slice(e + 1)); + int = e + 1; + } + else { + m = "0.".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.repeat)('0', -e - 1)).concat(m); + int = 1; + } + if (m.indexOf('.') >= 0 && maxPrecision > minPrecision) { + var cut = maxPrecision - minPrecision; + while (cut > 0 && m[m.length - 1] === '0') { + m = m.slice(0, -1); + cut--; + } + if (m[m.length - 1] === '.') { + m = m.slice(0, -1); + } + } + return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int }; + // x / (10 ** magnitude), but try to preserve as much floating point precision as possible. + function adjustDecimalPlace(x, magnitude) { + return magnitude < 0 ? x * Math.pow(10, -magnitude) : x / Math.pow(10, magnitude); + } +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js ***! + \*********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ digitMapping: () => (/* binding */ digitMapping) +/* harmony export */ }); +var digitMapping = { + "adlm": [ + "𞥐", + "𞥑", + "𞥒", + "𞥓", + "𞥔", + "𞥕", + "𞥖", + "𞥗", + "𞥘", + "𞥙" + ], + "ahom": [ + "𑜰", + "𑜱", + "𑜲", + "𑜳", + "𑜴", + "𑜵", + "𑜶", + "𑜷", + "𑜸", + "𑜹" + ], + "arab": [ + "٠", + "١", + "٢", + "٣", + "٤", + "٥", + "٦", + "٧", + "٨", + "٩" + ], + "arabext": [ + "۰", + "۱", + "۲", + "۳", + "۴", + "۵", + "۶", + "۷", + "۸", + "۹" + ], + "bali": [ + "᭐", + "᭑", + "᭒", + "᭓", + "᭔", + "᭕", + "᭖", + "᭗", + "᭘", + "᭙" + ], + "beng": [ + "০", + "১", + "২", + "৩", + "৪", + "৫", + "৬", + "৭", + "৮", + "৯" + ], + "bhks": [ + "𑱐", + "𑱑", + "𑱒", + "𑱓", + "𑱔", + "𑱕", + "𑱖", + "𑱗", + "𑱘", + "𑱙" + ], + "brah": [ + "𑁦", + "𑁧", + "𑁨", + "𑁩", + "𑁪", + "𑁫", + "𑁬", + "𑁭", + "𑁮", + "𑁯" + ], + "cakm": [ + "𑄶", + "𑄷", + "𑄸", + "𑄹", + "𑄺", + "𑄻", + "𑄼", + "𑄽", + "𑄾", + "𑄿" + ], + "cham": [ + "꩐", + "꩑", + "꩒", + "꩓", + "꩔", + "꩕", + "꩖", + "꩗", + "꩘", + "꩙" + ], + "deva": [ + "०", + "१", + "२", + "३", + "४", + "५", + "६", + "७", + "८", + "९" + ], + "diak": [ + "𑥐", + "𑥑", + "𑥒", + "𑥓", + "𑥔", + "𑥕", + "𑥖", + "𑥗", + "𑥘", + "𑥙" + ], + "fullwide": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "gong": [ + "𑶠", + "𑶡", + "𑶢", + "𑶣", + "𑶤", + "𑶥", + "𑶦", + "𑶧", + "𑶨", + "𑶩" + ], + "gonm": [ + "𑵐", + "𑵑", + "𑵒", + "𑵓", + "𑵔", + "𑵕", + "𑵖", + "𑵗", + "𑵘", + "𑵙" + ], + "gujr": [ + "૦", + "૧", + "૨", + "૩", + "૪", + "૫", + "૬", + "૭", + "૮", + "૯" + ], + "guru": [ + "੦", + "੧", + "੨", + "੩", + "੪", + "੫", + "੬", + "੭", + "੮", + "੯" + ], + "hanidec": [ + "〇", + "一", + "二", + "三", + "四", + "五", + "六", + "七", + "八", + "九" + ], + "hmng": [ + "𖭐", + "𖭑", + "𖭒", + "𖭓", + "𖭔", + "𖭕", + "𖭖", + "𖭗", + "𖭘", + "𖭙" + ], + "hmnp": [ + "𞅀", + "𞅁", + "𞅂", + "𞅃", + "𞅄", + "𞅅", + "𞅆", + "𞅇", + "𞅈", + "𞅉" + ], + "java": [ + "꧐", + "꧑", + "꧒", + "꧓", + "꧔", + "꧕", + "꧖", + "꧗", + "꧘", + "꧙" + ], + "kali": [ + "꤀", + "꤁", + "꤂", + "꤃", + "꤄", + "꤅", + "꤆", + "꤇", + "꤈", + "꤉" + ], + "khmr": [ + "០", + "១", + "២", + "៣", + "៤", + "៥", + "៦", + "៧", + "៨", + "៩" + ], + "knda": [ + "೦", + "೧", + "೨", + "೩", + "೪", + "೫", + "೬", + "೭", + "೮", + "೯" + ], + "lana": [ + "᪀", + "᪁", + "᪂", + "᪃", + "᪄", + "᪅", + "᪆", + "᪇", + "᪈", + "᪉" + ], + "lanatham": [ + "᪐", + "᪑", + "᪒", + "᪓", + "᪔", + "᪕", + "᪖", + "᪗", + "᪘", + "᪙" + ], + "laoo": [ + "໐", + "໑", + "໒", + "໓", + "໔", + "໕", + "໖", + "໗", + "໘", + "໙" + ], + "lepc": [ + "᪐", + "᪑", + "᪒", + "᪓", + "᪔", + "᪕", + "᪖", + "᪗", + "᪘", + "᪙" + ], + "limb": [ + "᥆", + "᥇", + "᥈", + "᥉", + "᥊", + "᥋", + "᥌", + "᥍", + "᥎", + "᥏" + ], + "mathbold": [ + "𝟎", + "𝟏", + "𝟐", + "𝟑", + "𝟒", + "𝟓", + "𝟔", + "𝟕", + "𝟖", + "𝟗" + ], + "mathdbl": [ + "𝟘", + "𝟙", + "𝟚", + "𝟛", + "𝟜", + "𝟝", + "𝟞", + "𝟟", + "𝟠", + "𝟡" + ], + "mathmono": [ + "𝟶", + "𝟷", + "𝟸", + "𝟹", + "𝟺", + "𝟻", + "𝟼", + "𝟽", + "𝟾", + "𝟿" + ], + "mathsanb": [ + "𝟬", + "𝟭", + "𝟮", + "𝟯", + "𝟰", + "𝟱", + "𝟲", + "𝟳", + "𝟴", + "𝟵" + ], + "mathsans": [ + "𝟢", + "𝟣", + "𝟤", + "𝟥", + "𝟦", + "𝟧", + "𝟨", + "𝟩", + "𝟪", + "𝟫" + ], + "mlym": [ + "൦", + "൧", + "൨", + "൩", + "൪", + "൫", + "൬", + "൭", + "൮", + "൯" + ], + "modi": [ + "𑙐", + "𑙑", + "𑙒", + "𑙓", + "𑙔", + "𑙕", + "𑙖", + "𑙗", + "𑙘", + "𑙙" + ], + "mong": [ + "᠐", + "᠑", + "᠒", + "᠓", + "᠔", + "᠕", + "᠖", + "᠗", + "᠘", + "᠙" + ], + "mroo": [ + "𖩠", + "𖩡", + "𖩢", + "𖩣", + "𖩤", + "𖩥", + "𖩦", + "𖩧", + "𖩨", + "𖩩" + ], + "mtei": [ + "꯰", + "꯱", + "꯲", + "꯳", + "꯴", + "꯵", + "꯶", + "꯷", + "꯸", + "꯹" + ], + "mymr": [ + "၀", + "၁", + "၂", + "၃", + "၄", + "၅", + "၆", + "၇", + "၈", + "၉" + ], + "mymrshan": [ + "႐", + "႑", + "႒", + "႓", + "႔", + "႕", + "႖", + "႗", + "႘", + "႙" + ], + "mymrtlng": [ + "꧰", + "꧱", + "꧲", + "꧳", + "꧴", + "꧵", + "꧶", + "꧷", + "꧸", + "꧹" + ], + "newa": [ + "𑑐", + "𑑑", + "𑑒", + "𑑓", + "𑑔", + "𑑕", + "𑑖", + "𑑗", + "𑑘", + "𑑙" + ], + "nkoo": [ + "߀", + "߁", + "߂", + "߃", + "߄", + "߅", + "߆", + "߇", + "߈", + "߉" + ], + "olck": [ + "᱐", + "᱑", + "᱒", + "᱓", + "᱔", + "᱕", + "᱖", + "᱗", + "᱘", + "᱙" + ], + "orya": [ + "୦", + "୧", + "୨", + "୩", + "୪", + "୫", + "୬", + "୭", + "୮", + "୯" + ], + "osma": [ + "𐒠", + "𐒡", + "𐒢", + "𐒣", + "𐒤", + "𐒥", + "𐒦", + "𐒧", + "𐒨", + "𐒩" + ], + "rohg": [ + "𐴰", + "𐴱", + "𐴲", + "𐴳", + "𐴴", + "𐴵", + "𐴶", + "𐴷", + "𐴸", + "𐴹" + ], + "saur": [ + "꣐", + "꣑", + "꣒", + "꣓", + "꣔", + "꣕", + "꣖", + "꣗", + "꣘", + "꣙" + ], + "segment": [ + "🯰", + "🯱", + "🯲", + "🯳", + "🯴", + "🯵", + "🯶", + "🯷", + "🯸", + "🯹" + ], + "shrd": [ + "𑇐", + "𑇑", + "𑇒", + "𑇓", + "𑇔", + "𑇕", + "𑇖", + "𑇗", + "𑇘", + "𑇙" + ], + "sind": [ + "𑋰", + "𑋱", + "𑋲", + "𑋳", + "𑋴", + "𑋵", + "𑋶", + "𑋷", + "𑋸", + "𑋹" + ], + "sinh": [ + "෦", + "෧", + "෨", + "෩", + "෪", + "෫", + "෬", + "෭", + "෮", + "෯" + ], + "sora": [ + "𑃰", + "𑃱", + "𑃲", + "𑃳", + "𑃴", + "𑃵", + "𑃶", + "𑃷", + "𑃸", + "𑃹" + ], + "sund": [ + "᮰", + "᮱", + "᮲", + "᮳", + "᮴", + "᮵", + "᮶", + "᮷", + "᮸", + "᮹" + ], + "takr": [ + "𑛀", + "𑛁", + "𑛂", + "𑛃", + "𑛄", + "𑛅", + "𑛆", + "𑛇", + "𑛈", + "𑛉" + ], + "talu": [ + "᧐", + "᧑", + "᧒", + "᧓", + "᧔", + "᧕", + "᧖", + "᧗", + "᧘", + "᧙" + ], + "tamldec": [ + "௦", + "௧", + "௨", + "௩", + "௪", + "௫", + "௬", + "௭", + "௮", + "௯" + ], + "telu": [ + "౦", + "౧", + "౨", + "౩", + "౪", + "౫", + "౬", + "౭", + "౮", + "౯" + ], + "thai": [ + "๐", + "๑", + "๒", + "๓", + "๔", + "๕", + "๖", + "๗", + "๘", + "๙" + ], + "tibt": [ + "༠", + "༡", + "༢", + "༣", + "༤", + "༥", + "༦", + "༧", + "༨", + "༩" + ], + "tirh": [ + "𑓐", + "𑓑", + "𑓒", + "𑓓", + "𑓔", + "𑓕", + "𑓖", + "𑓗", + "𑓘", + "𑓙" + ], + "vaii": [ + "ᘠ", + "ᘡ", + "ᘢ", + "ᘣ", + "ᘤ", + "ᘥ", + "ᘦ", + "ᘧ", + "ᘨ", + "ᘩ" + ], + "wara": [ + "𑣠", + "𑣡", + "𑣢", + "𑣣", + "𑣤", + "𑣥", + "𑣦", + "𑣧", + "𑣨", + "𑣩" + ], + "wcho": [ + "𞋰", + "𞋱", + "𞋲", + "𞋳", + "𞋴", + "𞋵", + "𞋶", + "𞋷", + "𞋸", + "𞋹" + ] +}; + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js ***! + \*************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ formatToParts) +/* harmony export */ }); +/* harmony import */ var _ToRawFixed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ToRawFixed */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js"); +/* harmony import */ var _digit_mapping_generated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./digit-mapping.generated */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js"); +/* harmony import */ var _regex_generated__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../regex.generated */ "./node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js"); + + + +// This is from: unicode-12.1.0/General_Category/Symbol/regex.js +// IE11 does not support unicode flag, otherwise this is just /\p{S}/u. +// /^\p{S}/u +var CARET_S_UNICODE_REGEX = new RegExp("^".concat(_regex_generated__WEBPACK_IMPORTED_MODULE_0__.S_UNICODE_REGEX.source)); +// /\p{S}$/u +var S_DOLLAR_UNICODE_REGEX = new RegExp("".concat(_regex_generated__WEBPACK_IMPORTED_MODULE_0__.S_UNICODE_REGEX.source, "$")); +var CLDR_NUMBER_PATTERN = /[#0](?:[\.,][#0]+)*/g; +function formatToParts(numberResult, data, pl, options) { + var sign = numberResult.sign, exponent = numberResult.exponent, magnitude = numberResult.magnitude; + var notation = options.notation, style = options.style, numberingSystem = options.numberingSystem; + var defaultNumberingSystem = data.numbers.nu[0]; + // #region Part 1: partition and interpolate the CLDR number pattern. + // ---------------------------------------------------------- + var compactNumberPattern = null; + if (notation === 'compact' && magnitude) { + compactNumberPattern = getCompactDisplayPattern(numberResult, pl, data, style, options.compactDisplay, options.currencyDisplay, numberingSystem); + } + // This is used multiple times + var nonNameCurrencyPart; + if (style === 'currency' && options.currencyDisplay !== 'name') { + var byCurrencyDisplay = data.currencies[options.currency]; + if (byCurrencyDisplay) { + switch (options.currencyDisplay) { + case 'code': + nonNameCurrencyPart = options.currency; + break; + case 'symbol': + nonNameCurrencyPart = byCurrencyDisplay.symbol; + break; + default: + nonNameCurrencyPart = byCurrencyDisplay.narrow; + break; + } + } + else { + // Fallback for unknown currency + nonNameCurrencyPart = options.currency; + } + } + var numberPattern; + if (!compactNumberPattern) { + // Note: if the style is unit, or is currency and the currency display is name, + // its unit parts will be interpolated in part 2. So here we can fallback to decimal. + if (style === 'decimal' || + style === 'unit' || + (style === 'currency' && options.currencyDisplay === 'name')) { + // Shortcut for decimal + var decimalData = data.numbers.decimal[numberingSystem] || + data.numbers.decimal[defaultNumberingSystem]; + numberPattern = getPatternForSign(decimalData.standard, sign); + } + else if (style === 'currency') { + var currencyData = data.numbers.currency[numberingSystem] || + data.numbers.currency[defaultNumberingSystem]; + // We replace number pattern part with `0` for easier postprocessing. + numberPattern = getPatternForSign(currencyData[options.currencySign], sign); + } + else { + // percent + var percentPattern = data.numbers.percent[numberingSystem] || + data.numbers.percent[defaultNumberingSystem]; + numberPattern = getPatternForSign(percentPattern, sign); + } + } + else { + numberPattern = compactNumberPattern; + } + // Extract the decimal number pattern string. It looks like "#,##0,00", which will later be + // used to infer decimal group sizes. + var decimalNumberPattern = CLDR_NUMBER_PATTERN.exec(numberPattern)[0]; + // Now we start to substitute patterns + // 1. replace strings like `0` and `#,##0.00` with `{0}` + // 2. unquote characters (invariant: the quoted characters does not contain the special tokens) + numberPattern = numberPattern + .replace(CLDR_NUMBER_PATTERN, '{0}') + .replace(/'(.)'/g, '$1'); + // Handle currency spacing (both compact and non-compact). + if (style === 'currency' && options.currencyDisplay !== 'name') { + var currencyData = data.numbers.currency[numberingSystem] || + data.numbers.currency[defaultNumberingSystem]; + // See `currencySpacing` substitution rule in TR-35. + // Here we always assume the currencyMatch is "[:^S:]" and surroundingMatch is "[:digit:]". + // + // Example 1: for pattern "#,##0.00¤" with symbol "US$", we replace "¤" with the symbol, + // but insert an extra non-break space before the symbol, because "[:^S:]" matches "U" in + // "US$" and "[:digit:]" matches the latn numbering system digits. + // + // Example 2: for pattern "¤#,##0.00" with symbol "US$", there is no spacing between symbol + // and number, because `$` does not match "[:^S:]". + // + // Implementation note: here we do the best effort to infer the insertion. + // We also assume that `beforeInsertBetween` and `afterInsertBetween` will never be `;`. + var afterCurrency = currencyData.currencySpacing.afterInsertBetween; + if (afterCurrency && !S_DOLLAR_UNICODE_REGEX.test(nonNameCurrencyPart)) { + numberPattern = numberPattern.replace('¤{0}', "\u00A4".concat(afterCurrency, "{0}")); + } + var beforeCurrency = currencyData.currencySpacing.beforeInsertBetween; + if (beforeCurrency && !CARET_S_UNICODE_REGEX.test(nonNameCurrencyPart)) { + numberPattern = numberPattern.replace('{0}¤', "{0}".concat(beforeCurrency, "\u00A4")); + } + } + // The following tokens are special: `{0}`, `¤`, `%`, `-`, `+`, `{c:...}. + var numberPatternParts = numberPattern.split(/({c:[^}]+}|\{0\}|[¤%\-\+])/g); + var numberParts = []; + var symbols = data.numbers.symbols[numberingSystem] || + data.numbers.symbols[defaultNumberingSystem]; + for (var _i = 0, numberPatternParts_1 = numberPatternParts; _i < numberPatternParts_1.length; _i++) { + var part = numberPatternParts_1[_i]; + if (!part) { + continue; + } + switch (part) { + case '{0}': { + // We only need to handle scientific and engineering notation here. + numberParts.push.apply(numberParts, paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem, + // If compact number pattern exists, do not insert group separators. + !compactNumberPattern && Boolean(options.useGrouping), decimalNumberPattern)); + break; + } + case '-': + numberParts.push({ type: 'minusSign', value: symbols.minusSign }); + break; + case '+': + numberParts.push({ type: 'plusSign', value: symbols.plusSign }); + break; + case '%': + numberParts.push({ type: 'percentSign', value: symbols.percentSign }); + break; + case '¤': + // Computed above when handling currency spacing. + numberParts.push({ type: 'currency', value: nonNameCurrencyPart }); + break; + default: + if (/^\{c:/.test(part)) { + numberParts.push({ + type: 'compact', + value: part.substring(3, part.length - 1), + }); + } + else { + // literal + numberParts.push({ type: 'literal', value: part }); + } + break; + } + } + // #endregion + // #region Part 2: interpolate unit pattern if necessary. + // ---------------------------------------------- + switch (style) { + case 'currency': { + // `currencyDisplay: 'name'` has similar pattern handling as units. + if (options.currencyDisplay === 'name') { + var unitPattern = (data.numbers.currency[numberingSystem] || + data.numbers.currency[defaultNumberingSystem]).unitPattern; + // Select plural + var unitName = void 0; + var currencyNameData = data.currencies[options.currency]; + if (currencyNameData) { + unitName = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), currencyNameData.displayName); + } + else { + // Fallback for unknown currency + unitName = options.currency; + } + // Do {0} and {1} substitution + var unitPatternParts = unitPattern.split(/(\{[01]\})/g); + var result = []; + for (var _a = 0, unitPatternParts_1 = unitPatternParts; _a < unitPatternParts_1.length; _a++) { + var part = unitPatternParts_1[_a]; + switch (part) { + case '{0}': + result.push.apply(result, numberParts); + break; + case '{1}': + result.push({ type: 'currency', value: unitName }); + break; + default: + if (part) { + result.push({ type: 'literal', value: part }); + } + break; + } + } + return result; + } + else { + return numberParts; + } + } + case 'unit': { + var unit = options.unit, unitDisplay = options.unitDisplay; + var unitData = data.units.simple[unit]; + var unitPattern = void 0; + if (unitData) { + // Simple unit pattern + unitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[unit][unitDisplay]); + } + else { + // See: http://unicode.org/reports/tr35/tr35-general.html#perUnitPatterns + // If cannot find unit in the simple pattern, it must be "per" compound pattern. + // Implementation note: we are not following TR-35 here because we need to format to parts! + var _b = unit.split('-per-'), numeratorUnit = _b[0], denominatorUnit = _b[1]; + unitData = data.units.simple[numeratorUnit]; + var numeratorUnitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[numeratorUnit][unitDisplay]); + var perUnitPattern = data.units.simple[denominatorUnit].perUnit[unitDisplay]; + if (perUnitPattern) { + // perUnitPattern exists, combine it with numeratorUnitPattern + unitPattern = perUnitPattern.replace('{0}', numeratorUnitPattern); + } + else { + // get compoundUnit pattern (e.g. "{0} per {1}"), repalce {0} with numerator pattern and {1} with + // the denominator pattern in singular form. + var perPattern = data.units.compound.per[unitDisplay]; + var denominatorPattern = selectPlural(pl, 1, data.units.simple[denominatorUnit][unitDisplay]); + unitPattern = unitPattern = perPattern + .replace('{0}', numeratorUnitPattern) + .replace('{1}', denominatorPattern.replace('{0}', '')); + } + } + var result = []; + // We need spacing around "{0}" because they are not treated as "unit" parts, but "literal". + for (var _c = 0, _d = unitPattern.split(/(\s*\{0\}\s*)/); _c < _d.length; _c++) { + var part = _d[_c]; + var interpolateMatch = /^(\s*)\{0\}(\s*)$/.exec(part); + if (interpolateMatch) { + // Space before "{0}" + if (interpolateMatch[1]) { + result.push({ type: 'literal', value: interpolateMatch[1] }); + } + // "{0}" itself + result.push.apply(result, numberParts); + // Space after "{0}" + if (interpolateMatch[2]) { + result.push({ type: 'literal', value: interpolateMatch[2] }); + } + } + else if (part) { + result.push({ type: 'unit', value: part }); + } + } + return result; + } + default: + return numberParts; + } + // #endregion +} +// A subset of https://tc39.es/ecma402/#sec-partitionnotationsubpattern +// Plus the exponent parts handling. +function paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem, useGrouping, +/** + * This is the decimal number pattern without signs or symbols. + * It is used to infer the group size when `useGrouping` is true. + * + * A typical value looks like "#,##0.00" (primary group size is 3). + * Some locales like Hindi has secondary group size of 2 (e.g. "#,##,##0.00"). + */ +decimalNumberPattern) { + var result = []; + // eslint-disable-next-line prefer-const + var n = numberResult.formattedString, x = numberResult.roundedNumber; + if (isNaN(x)) { + return [{ type: 'nan', value: n }]; + } + else if (!isFinite(x)) { + return [{ type: 'infinity', value: n }]; + } + var digitReplacementTable = _digit_mapping_generated__WEBPACK_IMPORTED_MODULE_1__.digitMapping[numberingSystem]; + if (digitReplacementTable) { + n = n.replace(/\d/g, function (digit) { return digitReplacementTable[+digit] || digit; }); + } + // TODO: Else use an implementation dependent algorithm to map n to the appropriate + // representation of n in the given numbering system. + var decimalSepIndex = n.indexOf('.'); + var integer; + var fraction; + if (decimalSepIndex > 0) { + integer = n.slice(0, decimalSepIndex); + fraction = n.slice(decimalSepIndex + 1); + } + else { + integer = n; + } + // #region Grouping integer digits + // The weird compact and x >= 10000 check is to ensure consistency with Node.js and Chrome. + // Note that `de` does not have compact form for thousands, but Node.js does not insert grouping separator + // unless the rounded number is greater than 10000: + // NumberFormat('de', {notation: 'compact', compactDisplay: 'short'}).format(1234) //=> "1234" + // NumberFormat('de').format(1234) //=> "1.234" + if (useGrouping && (notation !== 'compact' || x >= 10000)) { + var groupSepSymbol = symbols.group; + var groups = []; + // > There may be two different grouping sizes: The primary grouping size used for the least + // > significant integer group, and the secondary grouping size used for more significant groups. + // > If a pattern contains multiple grouping separators, the interval between the last one and the + // > end of the integer defines the primary grouping size, and the interval between the last two + // > defines the secondary grouping size. All others are ignored. + var integerNumberPattern = decimalNumberPattern.split('.')[0]; + var patternGroups = integerNumberPattern.split(','); + var primaryGroupingSize = 3; + var secondaryGroupingSize = 3; + if (patternGroups.length > 1) { + primaryGroupingSize = patternGroups[patternGroups.length - 1].length; + } + if (patternGroups.length > 2) { + secondaryGroupingSize = patternGroups[patternGroups.length - 2].length; + } + var i = integer.length - primaryGroupingSize; + if (i > 0) { + // Slice the least significant integer group + groups.push(integer.slice(i, i + primaryGroupingSize)); + // Then iteratively push the more signicant groups + // TODO: handle surrogate pairs in some numbering system digits + for (i -= secondaryGroupingSize; i > 0; i -= secondaryGroupingSize) { + groups.push(integer.slice(i, i + secondaryGroupingSize)); + } + groups.push(integer.slice(0, i + secondaryGroupingSize)); + } + else { + groups.push(integer); + } + while (groups.length > 0) { + var integerGroup = groups.pop(); + result.push({ type: 'integer', value: integerGroup }); + if (groups.length > 0) { + result.push({ type: 'group', value: groupSepSymbol }); + } + } + } + else { + result.push({ type: 'integer', value: integer }); + } + // #endregion + if (fraction !== undefined) { + result.push({ type: 'decimal', value: symbols.decimal }, { type: 'fraction', value: fraction }); + } + if ((notation === 'scientific' || notation === 'engineering') && + isFinite(x)) { + result.push({ type: 'exponentSeparator', value: symbols.exponential }); + if (exponent < 0) { + result.push({ type: 'exponentMinusSign', value: symbols.minusSign }); + exponent = -exponent; + } + var exponentResult = (0,_ToRawFixed__WEBPACK_IMPORTED_MODULE_2__.ToRawFixed)(exponent, 0, 0); + result.push({ + type: 'exponentInteger', + value: exponentResult.formattedString, + }); + } + return result; +} +function getPatternForSign(pattern, sign) { + if (pattern.indexOf(';') < 0) { + pattern = "".concat(pattern, ";-").concat(pattern); + } + var _a = pattern.split(';'), zeroPattern = _a[0], negativePattern = _a[1]; + switch (sign) { + case 0: + return zeroPattern; + case -1: + return negativePattern; + default: + return negativePattern.indexOf('-') >= 0 + ? negativePattern.replace(/-/g, '+') + : "+".concat(zeroPattern); + } +} +// Find the CLDR pattern for compact notation based on the magnitude of data and style. +// +// Example return value: "¤ {c:laki}000;¤{c:laki} -0" (`sw` locale): +// - Notice the `{c:...}` token that wraps the compact literal. +// - The consecutive zeros are normalized to single zero to match CLDR_NUMBER_PATTERN. +// +// Returning null means the compact display pattern cannot be found. +function getCompactDisplayPattern(numberResult, pl, data, style, compactDisplay, currencyDisplay, numberingSystem) { + var _a; + var roundedNumber = numberResult.roundedNumber, sign = numberResult.sign, magnitude = numberResult.magnitude; + var magnitudeKey = String(Math.pow(10, magnitude)); + var defaultNumberingSystem = data.numbers.nu[0]; + var pattern; + if (style === 'currency' && currencyDisplay !== 'name') { + var byNumberingSystem = data.numbers.currency; + var currencyData = byNumberingSystem[numberingSystem] || + byNumberingSystem[defaultNumberingSystem]; + // NOTE: compact notation ignores currencySign! + var compactPluralRules = (_a = currencyData.short) === null || _a === void 0 ? void 0 : _a[magnitudeKey]; + if (!compactPluralRules) { + return null; + } + pattern = selectPlural(pl, roundedNumber, compactPluralRules); + } + else { + var byNumberingSystem = data.numbers.decimal; + var byCompactDisplay = byNumberingSystem[numberingSystem] || + byNumberingSystem[defaultNumberingSystem]; + var compactPlaralRule = byCompactDisplay[compactDisplay][magnitudeKey]; + if (!compactPlaralRule) { + return null; + } + pattern = selectPlural(pl, roundedNumber, compactPlaralRule); + } + // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats + // > If the value is precisely “0”, either explicit or defaulted, then the normal number format + // > pattern for that sort of object is supplied. + if (pattern === '0') { + return null; + } + pattern = getPatternForSign(pattern, sign) + // Extract compact literal from the pattern + .replace(/([^\s;\-\+\d¤]+)/g, '{c:$1}') + // We replace one or more zeros with a single zero so it matches `CLDR_NUMBER_PATTERN`. + .replace(/0+/, '0'); + return pattern; +} +function selectPlural(pl, x, rules) { + return rules[pl.select(x)] || rules.other; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PartitionPattern: () => (/* binding */ PartitionPattern) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@formatjs/ecma402-abstract/lib/utils.js"); + +/** + * https://tc39.es/ecma402/#sec-partitionpattern + * @param pattern + */ +function PartitionPattern(pattern) { + var result = []; + var beginIndex = pattern.indexOf('{'); + var endIndex = 0; + var nextIndex = 0; + var length = pattern.length; + while (beginIndex < pattern.length && beginIndex > -1) { + endIndex = pattern.indexOf('}', beginIndex); + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.invariant)(endIndex > beginIndex, "Invalid pattern ".concat(pattern)); + if (beginIndex > nextIndex) { + result.push({ + type: 'literal', + value: pattern.substring(nextIndex, beginIndex), + }); + } + result.push({ + type: pattern.substring(beginIndex + 1, endIndex), + value: undefined, + }); + nextIndex = endIndex + 1; + beginIndex = pattern.indexOf('{', nextIndex); + } + if (nextIndex < length) { + result.push({ + type: 'literal', + value: pattern.substring(nextIndex, length), + }); + } + return result; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SupportedLocales: () => (/* binding */ SupportedLocales) +/* harmony export */ }); +/* harmony import */ var _formatjs_intl_localematcher__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @formatjs/intl-localematcher */ "./node_modules/@formatjs/intl-localematcher/lib/index.js"); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); +/* harmony import */ var _GetOption__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./GetOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js"); + + + +/** + * https://tc39.es/ecma402/#sec-supportedlocales + * @param availableLocales + * @param requestedLocales + * @param options + */ +function SupportedLocales(availableLocales, requestedLocales, options) { + var matcher = 'best fit'; + if (options !== undefined) { + options = (0,_262__WEBPACK_IMPORTED_MODULE_1__.ToObject)(options); + matcher = (0,_GetOption__WEBPACK_IMPORTED_MODULE_2__.GetOption)(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit'); + } + if (matcher === 'best fit') { + return (0,_formatjs_intl_localematcher__WEBPACK_IMPORTED_MODULE_0__.LookupSupportedLocales)(Array.from(availableLocales), requestedLocales); + } + return (0,_formatjs_intl_localematcher__WEBPACK_IMPORTED_MODULE_0__.LookupSupportedLocales)(Array.from(availableLocales), requestedLocales); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/data.js": +/*!*************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/data.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ isMissingLocaleDataError: () => (/* binding */ isMissingLocaleDataError) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); + +var MissingLocaleDataError = /** @class */ (function (_super) { + (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__extends)(MissingLocaleDataError, _super); + function MissingLocaleDataError() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.type = 'MISSING_LOCALE_DATA'; + return _this; + } + return MissingLocaleDataError; +}(Error)); +function isMissingLocaleDataError(e) { + return e.type === 'MISSING_LOCALE_DATA'; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/index.js": +/*!**************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/index.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ApplyUnsignedRoundingMode: () => (/* reexport safe */ _NumberFormat_ApplyUnsignedRoundingMode__WEBPACK_IMPORTED_MODULE_11__.ApplyUnsignedRoundingMode), +/* harmony export */ ArrayCreate: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.ArrayCreate), +/* harmony export */ CanonicalizeLocaleList: () => (/* reexport safe */ _CanonicalizeLocaleList__WEBPACK_IMPORTED_MODULE_0__.CanonicalizeLocaleList), +/* harmony export */ CanonicalizeTimeZoneName: () => (/* reexport safe */ _CanonicalizeTimeZoneName__WEBPACK_IMPORTED_MODULE_1__.CanonicalizeTimeZoneName), +/* harmony export */ CoerceOptionsToObject: () => (/* reexport safe */ _CoerceOptionsToObject__WEBPACK_IMPORTED_MODULE_2__.CoerceOptionsToObject), +/* harmony export */ CollapseNumberRange: () => (/* reexport safe */ _NumberFormat_CollapseNumberRange__WEBPACK_IMPORTED_MODULE_12__.CollapseNumberRange), +/* harmony export */ ComputeExponent: () => (/* reexport safe */ _NumberFormat_ComputeExponent__WEBPACK_IMPORTED_MODULE_13__.ComputeExponent), +/* harmony export */ ComputeExponentForMagnitude: () => (/* reexport safe */ _NumberFormat_ComputeExponentForMagnitude__WEBPACK_IMPORTED_MODULE_14__.ComputeExponentForMagnitude), +/* harmony export */ CurrencyDigits: () => (/* reexport safe */ _NumberFormat_CurrencyDigits__WEBPACK_IMPORTED_MODULE_15__.CurrencyDigits), +/* harmony export */ DateFromTime: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.DateFromTime), +/* harmony export */ Day: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.Day), +/* harmony export */ DayFromYear: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.DayFromYear), +/* harmony export */ DayWithinYear: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.DayWithinYear), +/* harmony export */ DaysInYear: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.DaysInYear), +/* harmony export */ FormatApproximately: () => (/* reexport safe */ _NumberFormat_FormatApproximately__WEBPACK_IMPORTED_MODULE_16__.FormatApproximately), +/* harmony export */ FormatNumericRange: () => (/* reexport safe */ _NumberFormat_FormatNumericRange__WEBPACK_IMPORTED_MODULE_17__.FormatNumericRange), +/* harmony export */ FormatNumericRangeToParts: () => (/* reexport safe */ _NumberFormat_FormatNumericRangeToParts__WEBPACK_IMPORTED_MODULE_18__.FormatNumericRangeToParts), +/* harmony export */ FormatNumericToParts: () => (/* reexport safe */ _NumberFormat_FormatNumericToParts__WEBPACK_IMPORTED_MODULE_19__.FormatNumericToParts), +/* harmony export */ FormatNumericToString: () => (/* reexport safe */ _NumberFormat_FormatNumericToString__WEBPACK_IMPORTED_MODULE_20__.FormatNumericToString), +/* harmony export */ GetNumberOption: () => (/* reexport safe */ _GetNumberOption__WEBPACK_IMPORTED_MODULE_3__.GetNumberOption), +/* harmony export */ GetOption: () => (/* reexport safe */ _GetOption__WEBPACK_IMPORTED_MODULE_4__.GetOption), +/* harmony export */ GetOptionsObject: () => (/* reexport safe */ _GetOptionsObject__WEBPACK_IMPORTED_MODULE_5__.GetOptionsObject), +/* harmony export */ GetStringOrBooleanOption: () => (/* reexport safe */ _GetStringOrBooleanOption__WEBPACK_IMPORTED_MODULE_6__.GetStringOrBooleanOption), +/* harmony export */ GetUnsignedRoundingMode: () => (/* reexport safe */ _NumberFormat_GetUnsignedRoundingMode__WEBPACK_IMPORTED_MODULE_21__.GetUnsignedRoundingMode), +/* harmony export */ HasOwnProperty: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.HasOwnProperty), +/* harmony export */ HourFromTime: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.HourFromTime), +/* harmony export */ InLeapYear: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.InLeapYear), +/* harmony export */ InitializeNumberFormat: () => (/* reexport safe */ _NumberFormat_InitializeNumberFormat__WEBPACK_IMPORTED_MODULE_22__.InitializeNumberFormat), +/* harmony export */ IsSanctionedSimpleUnitIdentifier: () => (/* reexport safe */ _IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_7__.IsSanctionedSimpleUnitIdentifier), +/* harmony export */ IsValidTimeZoneName: () => (/* reexport safe */ _IsValidTimeZoneName__WEBPACK_IMPORTED_MODULE_8__.IsValidTimeZoneName), +/* harmony export */ IsWellFormedCurrencyCode: () => (/* reexport safe */ _IsWellFormedCurrencyCode__WEBPACK_IMPORTED_MODULE_9__.IsWellFormedCurrencyCode), +/* harmony export */ IsWellFormedUnitIdentifier: () => (/* reexport safe */ _IsWellFormedUnitIdentifier__WEBPACK_IMPORTED_MODULE_10__.IsWellFormedUnitIdentifier), +/* harmony export */ MinFromTime: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.MinFromTime), +/* harmony export */ MonthFromTime: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.MonthFromTime), +/* harmony export */ OrdinaryHasInstance: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.OrdinaryHasInstance), +/* harmony export */ PartitionNumberPattern: () => (/* reexport safe */ _NumberFormat_PartitionNumberPattern__WEBPACK_IMPORTED_MODULE_23__.PartitionNumberPattern), +/* harmony export */ PartitionNumberRangePattern: () => (/* reexport safe */ _NumberFormat_PartitionNumberRangePattern__WEBPACK_IMPORTED_MODULE_24__.PartitionNumberRangePattern), +/* harmony export */ PartitionPattern: () => (/* reexport safe */ _PartitionPattern__WEBPACK_IMPORTED_MODULE_30__.PartitionPattern), +/* harmony export */ RangePatternType: () => (/* reexport safe */ _types_date_time__WEBPACK_IMPORTED_MODULE_34__.RangePatternType), +/* harmony export */ SANCTIONED_UNITS: () => (/* reexport safe */ _IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_7__.SANCTIONED_UNITS), +/* harmony export */ SIMPLE_UNITS: () => (/* reexport safe */ _IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_7__.SIMPLE_UNITS), +/* harmony export */ SameValue: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.SameValue), +/* harmony export */ SecFromTime: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.SecFromTime), +/* harmony export */ SetNumberFormatDigitOptions: () => (/* reexport safe */ _NumberFormat_SetNumberFormatDigitOptions__WEBPACK_IMPORTED_MODULE_25__.SetNumberFormatDigitOptions), +/* harmony export */ SetNumberFormatUnitOptions: () => (/* reexport safe */ _NumberFormat_SetNumberFormatUnitOptions__WEBPACK_IMPORTED_MODULE_26__.SetNumberFormatUnitOptions), +/* harmony export */ SupportedLocales: () => (/* reexport safe */ _SupportedLocales__WEBPACK_IMPORTED_MODULE_31__.SupportedLocales), +/* harmony export */ TimeClip: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.TimeClip), +/* harmony export */ TimeFromYear: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.TimeFromYear), +/* harmony export */ ToNumber: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.ToNumber), +/* harmony export */ ToObject: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.ToObject), +/* harmony export */ ToRawFixed: () => (/* reexport safe */ _NumberFormat_ToRawFixed__WEBPACK_IMPORTED_MODULE_27__.ToRawFixed), +/* harmony export */ ToRawPrecision: () => (/* reexport safe */ _NumberFormat_ToRawPrecision__WEBPACK_IMPORTED_MODULE_28__.ToRawPrecision), +/* harmony export */ ToString: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.ToString), +/* harmony export */ Type: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.Type), +/* harmony export */ WeekDay: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.WeekDay), +/* harmony export */ YearFromTime: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.YearFromTime), +/* harmony export */ _formatToParts: () => (/* reexport safe */ _NumberFormat_format_to_parts__WEBPACK_IMPORTED_MODULE_29__["default"]), +/* harmony export */ defineProperty: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_32__.defineProperty), +/* harmony export */ getInternalSlot: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_32__.getInternalSlot), +/* harmony export */ getMagnitude: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_32__.getMagnitude), +/* harmony export */ getMultiInternalSlots: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_32__.getMultiInternalSlots), +/* harmony export */ invariant: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_32__.invariant), +/* harmony export */ isLiteralPart: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_32__.isLiteralPart), +/* harmony export */ isMissingLocaleDataError: () => (/* reexport safe */ _data__WEBPACK_IMPORTED_MODULE_33__.isMissingLocaleDataError), +/* harmony export */ msFromTime: () => (/* reexport safe */ _262__WEBPACK_IMPORTED_MODULE_35__.msFromTime), +/* harmony export */ removeUnitNamespace: () => (/* reexport safe */ _IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_7__.removeUnitNamespace), +/* harmony export */ setInternalSlot: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_32__.setInternalSlot), +/* harmony export */ setMultiInternalSlots: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_32__.setMultiInternalSlots) +/* harmony export */ }); +/* harmony import */ var _CanonicalizeLocaleList__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CanonicalizeLocaleList */ "./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js"); +/* harmony import */ var _CanonicalizeTimeZoneName__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CanonicalizeTimeZoneName */ "./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js"); +/* harmony import */ var _CoerceOptionsToObject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CoerceOptionsToObject */ "./node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js"); +/* harmony import */ var _GetNumberOption__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./GetNumberOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js"); +/* harmony import */ var _GetOption__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./GetOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js"); +/* harmony import */ var _GetOptionsObject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./GetOptionsObject */ "./node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js"); +/* harmony import */ var _GetStringOrBooleanOption__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./GetStringOrBooleanOption */ "./node_modules/@formatjs/ecma402-abstract/lib/GetStringOrBooleanOption.js"); +/* harmony import */ var _IsSanctionedSimpleUnitIdentifier__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./IsSanctionedSimpleUnitIdentifier */ "./node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js"); +/* harmony import */ var _IsValidTimeZoneName__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./IsValidTimeZoneName */ "./node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js"); +/* harmony import */ var _IsWellFormedCurrencyCode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./IsWellFormedCurrencyCode */ "./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js"); +/* harmony import */ var _IsWellFormedUnitIdentifier__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./IsWellFormedUnitIdentifier */ "./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js"); +/* harmony import */ var _NumberFormat_ApplyUnsignedRoundingMode__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./NumberFormat/ApplyUnsignedRoundingMode */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ApplyUnsignedRoundingMode.js"); +/* harmony import */ var _NumberFormat_CollapseNumberRange__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./NumberFormat/CollapseNumberRange */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CollapseNumberRange.js"); +/* harmony import */ var _NumberFormat_ComputeExponent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./NumberFormat/ComputeExponent */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js"); +/* harmony import */ var _NumberFormat_ComputeExponentForMagnitude__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./NumberFormat/ComputeExponentForMagnitude */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js"); +/* harmony import */ var _NumberFormat_CurrencyDigits__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./NumberFormat/CurrencyDigits */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js"); +/* harmony import */ var _NumberFormat_FormatApproximately__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./NumberFormat/FormatApproximately */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatApproximately.js"); +/* harmony import */ var _NumberFormat_FormatNumericRange__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./NumberFormat/FormatNumericRange */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRange.js"); +/* harmony import */ var _NumberFormat_FormatNumericRangeToParts__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./NumberFormat/FormatNumericRangeToParts */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRangeToParts.js"); +/* harmony import */ var _NumberFormat_FormatNumericToParts__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./NumberFormat/FormatNumericToParts */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js"); +/* harmony import */ var _NumberFormat_FormatNumericToString__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./NumberFormat/FormatNumericToString */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js"); +/* harmony import */ var _NumberFormat_GetUnsignedRoundingMode__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./NumberFormat/GetUnsignedRoundingMode */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/GetUnsignedRoundingMode.js"); +/* harmony import */ var _NumberFormat_InitializeNumberFormat__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./NumberFormat/InitializeNumberFormat */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js"); +/* harmony import */ var _NumberFormat_PartitionNumberPattern__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./NumberFormat/PartitionNumberPattern */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js"); +/* harmony import */ var _NumberFormat_PartitionNumberRangePattern__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./NumberFormat/PartitionNumberRangePattern */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberRangePattern.js"); +/* harmony import */ var _NumberFormat_SetNumberFormatDigitOptions__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./NumberFormat/SetNumberFormatDigitOptions */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js"); +/* harmony import */ var _NumberFormat_SetNumberFormatUnitOptions__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./NumberFormat/SetNumberFormatUnitOptions */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js"); +/* harmony import */ var _NumberFormat_ToRawFixed__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./NumberFormat/ToRawFixed */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js"); +/* harmony import */ var _NumberFormat_ToRawPrecision__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./NumberFormat/ToRawPrecision */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js"); +/* harmony import */ var _NumberFormat_format_to_parts__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./NumberFormat/format_to_parts */ "./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js"); +/* harmony import */ var _PartitionPattern__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./PartitionPattern */ "./node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js"); +/* harmony import */ var _SupportedLocales__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./SupportedLocales */ "./node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./utils */ "./node_modules/@formatjs/ecma402-abstract/lib/utils.js"); +/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./data */ "./node_modules/@formatjs/ecma402-abstract/lib/data.js"); +/* harmony import */ var _types_date_time__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./types/date-time */ "./node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js"); +/* harmony import */ var _262__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./262 */ "./node_modules/@formatjs/ecma402-abstract/lib/262.js"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js": +/*!************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ S_UNICODE_REGEX: () => (/* binding */ S_UNICODE_REGEX) +/* harmony export */ }); +// @generated from regex-gen.ts +var S_UNICODE_REGEX = /[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]/; + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js": +/*!************************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RangePatternType: () => (/* binding */ RangePatternType) +/* harmony export */ }); +var RangePatternType; +(function (RangePatternType) { + RangePatternType["startRange"] = "startRange"; + RangePatternType["shared"] = "shared"; + RangePatternType["endRange"] = "endRange"; +})(RangePatternType || (RangePatternType = {})); + + +/***/ }), + +/***/ "./node_modules/@formatjs/ecma402-abstract/lib/utils.js": +/*!**************************************************************!*\ + !*** ./node_modules/@formatjs/ecma402-abstract/lib/utils.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ UNICODE_EXTENSION_SEQUENCE_REGEX: () => (/* binding */ UNICODE_EXTENSION_SEQUENCE_REGEX), +/* harmony export */ defineProperty: () => (/* binding */ defineProperty), +/* harmony export */ getInternalSlot: () => (/* binding */ getInternalSlot), +/* harmony export */ getMagnitude: () => (/* binding */ getMagnitude), +/* harmony export */ getMultiInternalSlots: () => (/* binding */ getMultiInternalSlots), +/* harmony export */ invariant: () => (/* binding */ invariant), +/* harmony export */ isLiteralPart: () => (/* binding */ isLiteralPart), +/* harmony export */ repeat: () => (/* binding */ repeat), +/* harmony export */ setInternalSlot: () => (/* binding */ setInternalSlot), +/* harmony export */ setMultiInternalSlots: () => (/* binding */ setMultiInternalSlots) +/* harmony export */ }); +/** + * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue + * @param x number + */ +function getMagnitude(x) { + // Cannot count string length via Number.toString because it may use scientific notation + // for very small or very large numbers. + return Math.floor(Math.log(x) * Math.LOG10E); +} +function repeat(s, times) { + if (typeof s.repeat === 'function') { + return s.repeat(times); + } + var arr = new Array(times); + for (var i = 0; i < arr.length; i++) { + arr[i] = s; + } + return arr.join(''); +} +function setInternalSlot(map, pl, field, value) { + if (!map.get(pl)) { + map.set(pl, Object.create(null)); + } + var slots = map.get(pl); + slots[field] = value; +} +function setMultiInternalSlots(map, pl, props) { + for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) { + var k = _a[_i]; + setInternalSlot(map, pl, k, props[k]); + } +} +function getInternalSlot(map, pl, field) { + return getMultiInternalSlots(map, pl, field)[field]; +} +function getMultiInternalSlots(map, pl) { + var fields = []; + for (var _i = 2; _i < arguments.length; _i++) { + fields[_i - 2] = arguments[_i]; + } + var slots = map.get(pl); + if (!slots) { + throw new TypeError("".concat(pl, " InternalSlot has not been initialized")); + } + return fields.reduce(function (all, f) { + all[f] = slots[f]; + return all; + }, Object.create(null)); +} +function isLiteralPart(patternPart) { + return patternPart.type === 'literal'; +} +/* + 17 ECMAScript Standard Built-in Objects: + Every built-in Function object, including constructors, that is not + identified as an anonymous function has a name property whose value + is a String. + + Unless otherwise specified, the name property of a built-in Function + object, if it exists, has the attributes { [[Writable]]: false, + [[Enumerable]]: false, [[Configurable]]: true }. +*/ +function defineProperty(target, name, _a) { + var value = _a.value; + Object.defineProperty(target, name, { + configurable: true, + enumerable: false, + writable: true, + value: value, + }); +} +var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi; +function invariant(condition, message, Err) { + if (Err === void 0) { Err = Error; } + if (!condition) { + throw new Err(message); + } +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/BestAvailableLocale.js": +/*!***************************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/BestAvailableLocale.js ***! + \***************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BestAvailableLocale: () => (/* binding */ BestAvailableLocale) +/* harmony export */ }); +/** + * https://tc39.es/ecma402/#sec-bestavailablelocale + * @param availableLocales + * @param locale + */ +function BestAvailableLocale(availableLocales, locale) { + var candidate = locale; + while (true) { + if (availableLocales.indexOf(candidate) > -1) { + return candidate; + } + var pos = candidate.lastIndexOf('-'); + if (!~pos) { + return undefined; + } + if (pos >= 2 && candidate[pos - 2] === '-') { + pos -= 2; + } + candidate = candidate.slice(0, pos); + } +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/BestFitMatcher.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/BestFitMatcher.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BestFitMatcher: () => (/* binding */ BestFitMatcher) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js"); + +/** + * https://tc39.es/ecma402/#sec-bestfitmatcher + * @param availableLocales + * @param requestedLocales + * @param getDefaultLocale + */ +function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) { + var foundLocale; + var extension; + var noExtensionLocales = []; + var noExtensionLocaleMap = requestedLocales.reduce(function (all, l) { + var noExtensionLocale = l.replace(_utils__WEBPACK_IMPORTED_MODULE_0__.UNICODE_EXTENSION_SEQUENCE_REGEX, ''); + noExtensionLocales.push(noExtensionLocale); + all[noExtensionLocale] = l; + return all; + }, {}); + var result = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.findBestMatch)(noExtensionLocales, availableLocales); + if (result.matchedSupportedLocale && result.matchedDesiredLocale) { + foundLocale = result.matchedSupportedLocale; + extension = + noExtensionLocaleMap[result.matchedDesiredLocale].slice(result.matchedDesiredLocale.length) || undefined; + } + if (!foundLocale) { + return { locale: getDefaultLocale() }; + } + return { + locale: foundLocale, + extension: extension, + }; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeLocaleList.js": +/*!******************************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeLocaleList.js ***! + \******************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ CanonicalizeLocaleList: () => (/* binding */ CanonicalizeLocaleList) +/* harmony export */ }); +/** + * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist + * @param locales + */ +function CanonicalizeLocaleList(locales) { + // TODO + return Intl.getCanonicalLocales(locales); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupMatcher.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupMatcher.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ LookupMatcher: () => (/* binding */ LookupMatcher) +/* harmony export */ }); +/* harmony import */ var _BestAvailableLocale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BestAvailableLocale */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/BestAvailableLocale.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js"); + + +/** + * https://tc39.es/ecma402/#sec-lookupmatcher + * @param availableLocales + * @param requestedLocales + * @param getDefaultLocale + */ +function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) { + var result = { locale: '' }; + for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) { + var locale = requestedLocales_1[_i]; + var noExtensionLocale = locale.replace(_utils__WEBPACK_IMPORTED_MODULE_1__.UNICODE_EXTENSION_SEQUENCE_REGEX, ''); + var availableLocale = (0,_BestAvailableLocale__WEBPACK_IMPORTED_MODULE_0__.BestAvailableLocale)(availableLocales, noExtensionLocale); + if (availableLocale) { + result.locale = availableLocale; + if (locale !== noExtensionLocale) { + result.extension = locale.slice(noExtensionLocale.length, locale.length); + } + return result; + } + } + result.locale = getDefaultLocale(); + return result; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupSupportedLocales.js": +/*!******************************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupSupportedLocales.js ***! + \******************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ LookupSupportedLocales: () => (/* binding */ LookupSupportedLocales) +/* harmony export */ }); +/* harmony import */ var _BestAvailableLocale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BestAvailableLocale */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/BestAvailableLocale.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js"); + + +/** + * https://tc39.es/ecma402/#sec-lookupsupportedlocales + * @param availableLocales + * @param requestedLocales + */ +function LookupSupportedLocales(availableLocales, requestedLocales) { + var subset = []; + for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) { + var locale = requestedLocales_1[_i]; + var noExtensionLocale = locale.replace(_utils__WEBPACK_IMPORTED_MODULE_1__.UNICODE_EXTENSION_SEQUENCE_REGEX, ''); + var availableLocale = (0,_BestAvailableLocale__WEBPACK_IMPORTED_MODULE_0__.BestAvailableLocale)(availableLocales, noExtensionLocale); + if (availableLocale) { + subset.push(availableLocale); + } + } + return subset; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/ResolveLocale.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/ResolveLocale.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ResolveLocale: () => (/* binding */ ResolveLocale) +/* harmony export */ }); +/* harmony import */ var _BestFitMatcher__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BestFitMatcher */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/BestFitMatcher.js"); +/* harmony import */ var _LookupMatcher__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LookupMatcher */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupMatcher.js"); +/* harmony import */ var _UnicodeExtensionValue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UnicodeExtensionValue */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/UnicodeExtensionValue.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js"); + + + + +/** + * https://tc39.es/ecma402/#sec-resolvelocale + */ +function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) { + var matcher = options.localeMatcher; + var r; + if (matcher === 'lookup') { + r = (0,_LookupMatcher__WEBPACK_IMPORTED_MODULE_1__.LookupMatcher)(Array.from(availableLocales), requestedLocales, getDefaultLocale); + } + else { + r = (0,_BestFitMatcher__WEBPACK_IMPORTED_MODULE_0__.BestFitMatcher)(Array.from(availableLocales), requestedLocales, getDefaultLocale); + } + var foundLocale = r.locale; + var result = { locale: '', dataLocale: foundLocale }; + var supportedExtension = '-u'; + for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) { + var key = relevantExtensionKeys_1[_i]; + (0,_utils__WEBPACK_IMPORTED_MODULE_3__.invariant)(foundLocale in localeData, "Missing locale data for ".concat(foundLocale)); + var foundLocaleData = localeData[foundLocale]; + (0,_utils__WEBPACK_IMPORTED_MODULE_3__.invariant)(typeof foundLocaleData === 'object' && foundLocaleData !== null, "locale data ".concat(key, " must be an object")); + var keyLocaleData = foundLocaleData[key]; + (0,_utils__WEBPACK_IMPORTED_MODULE_3__.invariant)(Array.isArray(keyLocaleData), "keyLocaleData for ".concat(key, " must be an array")); + var value = keyLocaleData[0]; + (0,_utils__WEBPACK_IMPORTED_MODULE_3__.invariant)(typeof value === 'string' || value === null, "value must be string or null but got ".concat(typeof value, " in key ").concat(key)); + var supportedExtensionAddition = ''; + if (r.extension) { + var requestedValue = (0,_UnicodeExtensionValue__WEBPACK_IMPORTED_MODULE_2__.UnicodeExtensionValue)(r.extension, key); + if (requestedValue !== undefined) { + if (requestedValue !== '') { + if (~keyLocaleData.indexOf(requestedValue)) { + value = requestedValue; + supportedExtensionAddition = "-".concat(key, "-").concat(value); + } + } + else if (~requestedValue.indexOf('true')) { + value = 'true'; + supportedExtensionAddition = "-".concat(key); + } + } + } + if (key in options) { + var optionsValue = options[key]; + (0,_utils__WEBPACK_IMPORTED_MODULE_3__.invariant)(typeof optionsValue === 'string' || + typeof optionsValue === 'undefined' || + optionsValue === null, 'optionsValue must be String, Undefined or Null'); + if (~keyLocaleData.indexOf(optionsValue)) { + if (optionsValue !== value) { + value = optionsValue; + supportedExtensionAddition = ''; + } + } + } + result[key] = value; + supportedExtension += supportedExtensionAddition; + } + if (supportedExtension.length > 2) { + var privateIndex = foundLocale.indexOf('-x-'); + if (privateIndex === -1) { + foundLocale = foundLocale + supportedExtension; + } + else { + var preExtension = foundLocale.slice(0, privateIndex); + var postExtension = foundLocale.slice(privateIndex, foundLocale.length); + foundLocale = preExtension + supportedExtension + postExtension; + } + foundLocale = Intl.getCanonicalLocales(foundLocale)[0]; + } + result.locale = foundLocale; + return result; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/UnicodeExtensionValue.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/UnicodeExtensionValue.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ UnicodeExtensionValue: () => (/* binding */ UnicodeExtensionValue) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js"); + +/** + * https://tc39.es/ecma402/#sec-unicodeextensionvalue + * @param extension + * @param key + */ +function UnicodeExtensionValue(extension, key) { + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.invariant)(key.length === 2, 'key must have 2 elements'); + var size = extension.length; + var searchValue = "-".concat(key, "-"); + var pos = extension.indexOf(searchValue); + if (pos !== -1) { + var start = pos + 4; + var end = start; + var k = start; + var done = false; + while (!done) { + var e = extension.indexOf('-', k); + var len = void 0; + if (e === -1) { + len = size - k; + } + else { + len = e - k; + } + if (len === 2) { + done = true; + } + else if (e === -1) { + end = size; + done = true; + } + else { + end = e; + k = e + 1; + } + } + return extension.slice(start, end); + } + searchValue = "-".concat(key); + pos = extension.indexOf(searchValue); + if (pos !== -1 && pos + 3 === size) { + return ''; + } + return undefined; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/languageMatching.js": +/*!************************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/languageMatching.js ***! + \************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ data: () => (/* binding */ data) +/* harmony export */ }); +var data = { + supplemental: { + languageMatching: { + 'written-new': [ + { + paradigmLocales: { + _locales: 'en en_GB es es_419 pt_BR pt_PT', + }, + }, + { + $enUS: { + _value: 'AS+CA+GU+MH+MP+PH+PR+UM+US+VI', + }, + }, + { + $cnsar: { + _value: 'HK+MO', + }, + }, + { + $americas: { + _value: '019', + }, + }, + { + $maghreb: { + _value: 'MA+DZ+TN+LY+MR+EH', + }, + }, + { + no: { + _desired: 'nb', + _distance: '1', + }, + }, + { + bs: { + _desired: 'hr', + _distance: '4', + }, + }, + { + bs: { + _desired: 'sh', + _distance: '4', + }, + }, + { + hr: { + _desired: 'sh', + _distance: '4', + }, + }, + { + sr: { + _desired: 'sh', + _distance: '4', + }, + }, + { + aa: { + _desired: 'ssy', + _distance: '4', + }, + }, + { + de: { + _desired: 'gsw', + _distance: '4', + _oneway: 'true', + }, + }, + { + de: { + _desired: 'lb', + _distance: '4', + _oneway: 'true', + }, + }, + { + no: { + _desired: 'da', + _distance: '8', + }, + }, + { + nb: { + _desired: 'da', + _distance: '8', + }, + }, + { + ru: { + _desired: 'ab', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ach', + _distance: '30', + _oneway: 'true', + }, + }, + { + nl: { + _desired: 'af', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ak', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'am', + _distance: '30', + _oneway: 'true', + }, + }, + { + es: { + _desired: 'ay', + _distance: '20', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'az', + _distance: '30', + _oneway: 'true', + }, + }, + { + ur: { + _desired: 'bal', + _distance: '20', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'be', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'bem', + _distance: '30', + _oneway: 'true', + }, + }, + { + hi: { + _desired: 'bh', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'bn', + _distance: '30', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'bo', + _distance: '20', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'br', + _distance: '20', + _oneway: 'true', + }, + }, + { + es: { + _desired: 'ca', + _distance: '20', + _oneway: 'true', + }, + }, + { + fil: { + _desired: 'ceb', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'chr', + _distance: '20', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ckb', + _distance: '30', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'co', + _distance: '20', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'crs', + _distance: '20', + _oneway: 'true', + }, + }, + { + sk: { + _desired: 'cs', + _distance: '20', + }, + }, + { + en: { + _desired: 'cy', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ee', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'eo', + _distance: '30', + _oneway: 'true', + }, + }, + { + es: { + _desired: 'eu', + _distance: '20', + _oneway: 'true', + }, + }, + { + da: { + _desired: 'fo', + _distance: '20', + _oneway: 'true', + }, + }, + { + nl: { + _desired: 'fy', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ga', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'gaa', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'gd', + _distance: '20', + _oneway: 'true', + }, + }, + { + es: { + _desired: 'gl', + _distance: '20', + _oneway: 'true', + }, + }, + { + es: { + _desired: 'gn', + _distance: '20', + _oneway: 'true', + }, + }, + { + hi: { + _desired: 'gu', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ha', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'haw', + _distance: '20', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'ht', + _distance: '20', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'hy', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ia', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ig', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'is', + _distance: '20', + _oneway: 'true', + }, + }, + { + id: { + _desired: 'jv', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ka', + _distance: '30', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'kg', + _distance: '30', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'kk', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'km', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'kn', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'kri', + _distance: '30', + _oneway: 'true', + }, + }, + { + tr: { + _desired: 'ku', + _distance: '30', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'ky', + _distance: '30', + _oneway: 'true', + }, + }, + { + it: { + _desired: 'la', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'lg', + _distance: '30', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'ln', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'lo', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'loz', + _distance: '30', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'lua', + _distance: '30', + _oneway: 'true', + }, + }, + { + hi: { + _desired: 'mai', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'mfe', + _distance: '30', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'mg', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'mi', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ml', + _distance: '30', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'mn', + _distance: '30', + _oneway: 'true', + }, + }, + { + hi: { + _desired: 'mr', + _distance: '30', + _oneway: 'true', + }, + }, + { + id: { + _desired: 'ms', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'mt', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'my', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ne', + _distance: '30', + _oneway: 'true', + }, + }, + { + nb: { + _desired: 'nn', + _distance: '20', + }, + }, + { + no: { + _desired: 'nn', + _distance: '20', + }, + }, + { + en: { + _desired: 'nso', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ny', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'nyn', + _distance: '30', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'oc', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'om', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'or', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'pa', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'pcm', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ps', + _distance: '30', + _oneway: 'true', + }, + }, + { + es: { + _desired: 'qu', + _distance: '30', + _oneway: 'true', + }, + }, + { + de: { + _desired: 'rm', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'rn', + _distance: '30', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'rw', + _distance: '30', + _oneway: 'true', + }, + }, + { + hi: { + _desired: 'sa', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'sd', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'si', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'sn', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'so', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'sq', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'st', + _distance: '30', + _oneway: 'true', + }, + }, + { + id: { + _desired: 'su', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'sw', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ta', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'te', + _distance: '30', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'tg', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ti', + _distance: '30', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'tk', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'tlh', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'tn', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'to', + _distance: '30', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'tt', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'tum', + _distance: '30', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'ug', + _distance: '20', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'uk', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'ur', + _distance: '30', + _oneway: 'true', + }, + }, + { + ru: { + _desired: 'uz', + _distance: '30', + _oneway: 'true', + }, + }, + { + fr: { + _desired: 'wo', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'xh', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'yi', + _distance: '30', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'yo', + _distance: '30', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'za', + _distance: '20', + _oneway: 'true', + }, + }, + { + en: { + _desired: 'zu', + _distance: '30', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'aao', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'abh', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'abv', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'acm', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'acq', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'acw', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'acx', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'acy', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'adf', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'aeb', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'aec', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'afb', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ajp', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'apc', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'apd', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'arq', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ars', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ary', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'arz', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'auz', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'avl', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ayh', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ayl', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ayn', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ayp', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'bbz', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'pga', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'shu', + _distance: '10', + _oneway: 'true', + }, + }, + { + ar: { + _desired: 'ssh', + _distance: '10', + _oneway: 'true', + }, + }, + { + az: { + _desired: 'azb', + _distance: '10', + _oneway: 'true', + }, + }, + { + et: { + _desired: 'vro', + _distance: '10', + _oneway: 'true', + }, + }, + { + ff: { + _desired: 'ffm', + _distance: '10', + _oneway: 'true', + }, + }, + { + ff: { + _desired: 'fub', + _distance: '10', + _oneway: 'true', + }, + }, + { + ff: { + _desired: 'fue', + _distance: '10', + _oneway: 'true', + }, + }, + { + ff: { + _desired: 'fuf', + _distance: '10', + _oneway: 'true', + }, + }, + { + ff: { + _desired: 'fuh', + _distance: '10', + _oneway: 'true', + }, + }, + { + ff: { + _desired: 'fui', + _distance: '10', + _oneway: 'true', + }, + }, + { + ff: { + _desired: 'fuq', + _distance: '10', + _oneway: 'true', + }, + }, + { + ff: { + _desired: 'fuv', + _distance: '10', + _oneway: 'true', + }, + }, + { + gn: { + _desired: 'gnw', + _distance: '10', + _oneway: 'true', + }, + }, + { + gn: { + _desired: 'gui', + _distance: '10', + _oneway: 'true', + }, + }, + { + gn: { + _desired: 'gun', + _distance: '10', + _oneway: 'true', + }, + }, + { + gn: { + _desired: 'nhd', + _distance: '10', + _oneway: 'true', + }, + }, + { + iu: { + _desired: 'ikt', + _distance: '10', + _oneway: 'true', + }, + }, + { + kln: { + _desired: 'enb', + _distance: '10', + _oneway: 'true', + }, + }, + { + kln: { + _desired: 'eyo', + _distance: '10', + _oneway: 'true', + }, + }, + { + kln: { + _desired: 'niq', + _distance: '10', + _oneway: 'true', + }, + }, + { + kln: { + _desired: 'oki', + _distance: '10', + _oneway: 'true', + }, + }, + { + kln: { + _desired: 'pko', + _distance: '10', + _oneway: 'true', + }, + }, + { + kln: { + _desired: 'sgc', + _distance: '10', + _oneway: 'true', + }, + }, + { + kln: { + _desired: 'tec', + _distance: '10', + _oneway: 'true', + }, + }, + { + kln: { + _desired: 'tuy', + _distance: '10', + _oneway: 'true', + }, + }, + { + kok: { + _desired: 'gom', + _distance: '10', + _oneway: 'true', + }, + }, + { + kpe: { + _desired: 'gkp', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'ida', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lkb', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lko', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lks', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lri', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lrm', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lsm', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lto', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lts', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'lwg', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'nle', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'nyd', + _distance: '10', + _oneway: 'true', + }, + }, + { + luy: { + _desired: 'rag', + _distance: '10', + _oneway: 'true', + }, + }, + { + lv: { + _desired: 'ltg', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'bhr', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'bjq', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'bmm', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'bzc', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'msh', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'skg', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'tdx', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'tkg', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'txy', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'xmv', + _distance: '10', + _oneway: 'true', + }, + }, + { + mg: { + _desired: 'xmw', + _distance: '10', + _oneway: 'true', + }, + }, + { + mn: { + _desired: 'mvf', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'bjn', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'btj', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'bve', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'bvu', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'coa', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'dup', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'hji', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'id', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'jak', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'jax', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'kvb', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'kvr', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'kxd', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'lce', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'lcf', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'liw', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'max', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'meo', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'mfa', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'mfb', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'min', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'mqg', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'msi', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'mui', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'orn', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'ors', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'pel', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'pse', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'tmw', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'urk', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'vkk', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'vkt', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'xmm', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'zlm', + _distance: '10', + _oneway: 'true', + }, + }, + { + ms: { + _desired: 'zmi', + _distance: '10', + _oneway: 'true', + }, + }, + { + ne: { + _desired: 'dty', + _distance: '10', + _oneway: 'true', + }, + }, + { + om: { + _desired: 'gax', + _distance: '10', + _oneway: 'true', + }, + }, + { + om: { + _desired: 'hae', + _distance: '10', + _oneway: 'true', + }, + }, + { + om: { + _desired: 'orc', + _distance: '10', + _oneway: 'true', + }, + }, + { + or: { + _desired: 'spv', + _distance: '10', + _oneway: 'true', + }, + }, + { + ps: { + _desired: 'pbt', + _distance: '10', + _oneway: 'true', + }, + }, + { + ps: { + _desired: 'pst', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qub', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qud', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'quf', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qug', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'quh', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'quk', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qul', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qup', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qur', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qus', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'quw', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qux', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'quy', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qva', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvc', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qve', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvh', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvi', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvj', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvl', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvm', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvn', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvo', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvp', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvs', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvw', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qvz', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qwa', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qwc', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qwh', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qws', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxa', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxc', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxh', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxl', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxn', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxo', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxp', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxr', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxt', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxu', + _distance: '10', + _oneway: 'true', + }, + }, + { + qu: { + _desired: 'qxw', + _distance: '10', + _oneway: 'true', + }, + }, + { + sc: { + _desired: 'sdc', + _distance: '10', + _oneway: 'true', + }, + }, + { + sc: { + _desired: 'sdn', + _distance: '10', + _oneway: 'true', + }, + }, + { + sc: { + _desired: 'sro', + _distance: '10', + _oneway: 'true', + }, + }, + { + sq: { + _desired: 'aae', + _distance: '10', + _oneway: 'true', + }, + }, + { + sq: { + _desired: 'aat', + _distance: '10', + _oneway: 'true', + }, + }, + { + sq: { + _desired: 'aln', + _distance: '10', + _oneway: 'true', + }, + }, + { + syr: { + _desired: 'aii', + _distance: '10', + _oneway: 'true', + }, + }, + { + uz: { + _desired: 'uzs', + _distance: '10', + _oneway: 'true', + }, + }, + { + yi: { + _desired: 'yih', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'cdo', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'cjy', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'cpx', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'czh', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'czo', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'gan', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'hak', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'hsn', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'lzh', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'mnp', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'nan', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'wuu', + _distance: '10', + _oneway: 'true', + }, + }, + { + zh: { + _desired: 'yue', + _distance: '10', + _oneway: 'true', + }, + }, + { + '*': { + _desired: '*', + _distance: '80', + }, + }, + { + 'en-Latn': { + _desired: 'am-Ethi', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'ru-Cyrl': { + _desired: 'az-Latn', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'bn-Beng', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'zh-Hans': { + _desired: 'bo-Tibt', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'ru-Cyrl': { + _desired: 'hy-Armn', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'ka-Geor', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'km-Khmr', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'kn-Knda', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'lo-Laoo', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'ml-Mlym', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'my-Mymr', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'ne-Deva', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'or-Orya', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'pa-Guru', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'ps-Arab', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'sd-Arab', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'si-Sinh', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'ta-Taml', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'te-Telu', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'ti-Ethi', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'ru-Cyrl': { + _desired: 'tk-Latn', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'ur-Arab', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'ru-Cyrl': { + _desired: 'uz-Latn', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'en-Latn': { + _desired: 'yi-Hebr', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'sr-Cyrl': { + _desired: 'sr-Latn', + _distance: '5', + }, + }, + { + 'zh-Hans': { + _desired: 'za-Latn', + _distance: '10', + _oneway: 'true', + }, + }, + { + 'zh-Hans': { + _desired: 'zh-Hani', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'zh-Hant': { + _desired: 'zh-Hani', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'ar-Arab': { + _desired: 'ar-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'bn-Beng': { + _desired: 'bn-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'gu-Gujr': { + _desired: 'gu-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'hi-Deva': { + _desired: 'hi-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'kn-Knda': { + _desired: 'kn-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'ml-Mlym': { + _desired: 'ml-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'mr-Deva': { + _desired: 'mr-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'ta-Taml': { + _desired: 'ta-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'te-Telu': { + _desired: 'te-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'zh-Hans': { + _desired: 'zh-Latn', + _distance: '20', + _oneway: 'true', + }, + }, + { + 'ja-Jpan': { + _desired: 'ja-Latn', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ja-Jpan': { + _desired: 'ja-Hani', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ja-Jpan': { + _desired: 'ja-Hira', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ja-Jpan': { + _desired: 'ja-Kana', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ja-Jpan': { + _desired: 'ja-Hrkt', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ja-Hrkt': { + _desired: 'ja-Hira', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ja-Hrkt': { + _desired: 'ja-Kana', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ko-Kore': { + _desired: 'ko-Hani', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ko-Kore': { + _desired: 'ko-Hang', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ko-Kore': { + _desired: 'ko-Jamo', + _distance: '5', + _oneway: 'true', + }, + }, + { + 'ko-Hang': { + _desired: 'ko-Jamo', + _distance: '5', + _oneway: 'true', + }, + }, + { + '*-*': { + _desired: '*-*', + _distance: '50', + }, + }, + { + 'ar-*-$maghreb': { + _desired: 'ar-*-$maghreb', + _distance: '4', + }, + }, + { + 'ar-*-$!maghreb': { + _desired: 'ar-*-$!maghreb', + _distance: '4', + }, + }, + { + 'ar-*-*': { + _desired: 'ar-*-*', + _distance: '5', + }, + }, + { + 'en-*-$enUS': { + _desired: 'en-*-$enUS', + _distance: '4', + }, + }, + { + 'en-*-GB': { + _desired: 'en-*-$!enUS', + _distance: '3', + }, + }, + { + 'en-*-$!enUS': { + _desired: 'en-*-$!enUS', + _distance: '4', + }, + }, + { + 'en-*-*': { + _desired: 'en-*-*', + _distance: '5', + }, + }, + { + 'es-*-$americas': { + _desired: 'es-*-$americas', + _distance: '4', + }, + }, + { + 'es-*-$!americas': { + _desired: 'es-*-$!americas', + _distance: '4', + }, + }, + { + 'es-*-*': { + _desired: 'es-*-*', + _distance: '5', + }, + }, + { + 'pt-*-$americas': { + _desired: 'pt-*-$americas', + _distance: '4', + }, + }, + { + 'pt-*-$!americas': { + _desired: 'pt-*-$!americas', + _distance: '4', + }, + }, + { + 'pt-*-*': { + _desired: 'pt-*-*', + _distance: '5', + }, + }, + { + 'zh-Hant-$cnsar': { + _desired: 'zh-Hant-$cnsar', + _distance: '4', + }, + }, + { + 'zh-Hant-$!cnsar': { + _desired: 'zh-Hant-$!cnsar', + _distance: '4', + }, + }, + { + 'zh-Hant-*': { + _desired: 'zh-Hant-*', + _distance: '5', + }, + }, + { + '*-*-*': { + _desired: '*-*-*', + _distance: '4', + }, + }, + ], + }, + }, +}; + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/regions.generated.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/regions.generated.js ***! + \*************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ regions: () => (/* binding */ regions) +/* harmony export */ }); +// This file is generated from regions-gen.ts +var regions = { + "001": [ + "001", + "001-status-grouping", + "002", + "005", + "009", + "011", + "013", + "014", + "015", + "017", + "018", + "019", + "021", + "029", + "030", + "034", + "035", + "039", + "053", + "054", + "057", + "061", + "142", + "143", + "145", + "150", + "151", + "154", + "155", + "AC", + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CP", + "CQ", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DG", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EA", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "EU", + "EZ", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "IC", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "QO", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TA", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "UN", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW" + ], + "002": [ + "002", + "002-status-grouping", + "011", + "014", + "015", + "017", + "018", + "202", + "AO", + "BF", + "BI", + "BJ", + "BW", + "CD", + "CF", + "CG", + "CI", + "CM", + "CV", + "DJ", + "DZ", + "EA", + "EG", + "EH", + "ER", + "ET", + "GA", + "GH", + "GM", + "GN", + "GQ", + "GW", + "IC", + "IO", + "KE", + "KM", + "LR", + "LS", + "LY", + "MA", + "MG", + "ML", + "MR", + "MU", + "MW", + "MZ", + "NA", + "NE", + "NG", + "RE", + "RW", + "SC", + "SD", + "SH", + "SL", + "SN", + "SO", + "SS", + "ST", + "SZ", + "TD", + "TF", + "TG", + "TN", + "TZ", + "UG", + "YT", + "ZA", + "ZM", + "ZW" + ], + "003": [ + "003", + "013", + "021", + "029", + "AG", + "AI", + "AW", + "BB", + "BL", + "BM", + "BQ", + "BS", + "BZ", + "CA", + "CR", + "CU", + "CW", + "DM", + "DO", + "GD", + "GL", + "GP", + "GT", + "HN", + "HT", + "JM", + "KN", + "KY", + "LC", + "MF", + "MQ", + "MS", + "MX", + "NI", + "PA", + "PM", + "PR", + "SV", + "SX", + "TC", + "TT", + "US", + "VC", + "VG", + "VI" + ], + "005": [ + "005", + "AR", + "BO", + "BR", + "BV", + "CL", + "CO", + "EC", + "FK", + "GF", + "GS", + "GY", + "PE", + "PY", + "SR", + "UY", + "VE" + ], + "009": [ + "009", + "053", + "054", + "057", + "061", + "AC", + "AQ", + "AS", + "AU", + "CC", + "CK", + "CP", + "CX", + "DG", + "FJ", + "FM", + "GU", + "HM", + "KI", + "MH", + "MP", + "NC", + "NF", + "NR", + "NU", + "NZ", + "PF", + "PG", + "PN", + "PW", + "QO", + "SB", + "TA", + "TK", + "TO", + "TV", + "UM", + "VU", + "WF", + "WS" + ], + "011": [ + "011", + "BF", + "BJ", + "CI", + "CV", + "GH", + "GM", + "GN", + "GW", + "LR", + "ML", + "MR", + "NE", + "NG", + "SH", + "SL", + "SN", + "TG" + ], + "013": [ + "013", + "BZ", + "CR", + "GT", + "HN", + "MX", + "NI", + "PA", + "SV" + ], + "014": [ + "014", + "BI", + "DJ", + "ER", + "ET", + "IO", + "KE", + "KM", + "MG", + "MU", + "MW", + "MZ", + "RE", + "RW", + "SC", + "SO", + "SS", + "TF", + "TZ", + "UG", + "YT", + "ZM", + "ZW" + ], + "015": [ + "015", + "DZ", + "EA", + "EG", + "EH", + "IC", + "LY", + "MA", + "SD", + "TN" + ], + "017": [ + "017", + "AO", + "CD", + "CF", + "CG", + "CM", + "GA", + "GQ", + "ST", + "TD" + ], + "018": [ + "018", + "BW", + "LS", + "NA", + "SZ", + "ZA" + ], + "019": [ + "003", + "005", + "013", + "019", + "019-status-grouping", + "021", + "029", + "419", + "AG", + "AI", + "AR", + "AW", + "BB", + "BL", + "BM", + "BO", + "BQ", + "BR", + "BS", + "BV", + "BZ", + "CA", + "CL", + "CO", + "CR", + "CU", + "CW", + "DM", + "DO", + "EC", + "FK", + "GD", + "GF", + "GL", + "GP", + "GS", + "GT", + "GY", + "HN", + "HT", + "JM", + "KN", + "KY", + "LC", + "MF", + "MQ", + "MS", + "MX", + "NI", + "PA", + "PE", + "PM", + "PR", + "PY", + "SR", + "SV", + "SX", + "TC", + "TT", + "US", + "UY", + "VC", + "VE", + "VG", + "VI" + ], + "021": [ + "021", + "BM", + "CA", + "GL", + "PM", + "US" + ], + "029": [ + "029", + "AG", + "AI", + "AW", + "BB", + "BL", + "BQ", + "BS", + "CU", + "CW", + "DM", + "DO", + "GD", + "GP", + "HT", + "JM", + "KN", + "KY", + "LC", + "MF", + "MQ", + "MS", + "PR", + "SX", + "TC", + "TT", + "VC", + "VG", + "VI" + ], + "030": [ + "030", + "CN", + "HK", + "JP", + "KP", + "KR", + "MN", + "MO", + "TW" + ], + "034": [ + "034", + "AF", + "BD", + "BT", + "IN", + "IR", + "LK", + "MV", + "NP", + "PK" + ], + "035": [ + "035", + "BN", + "ID", + "KH", + "LA", + "MM", + "MY", + "PH", + "SG", + "TH", + "TL", + "VN" + ], + "039": [ + "039", + "AD", + "AL", + "BA", + "ES", + "GI", + "GR", + "HR", + "IT", + "ME", + "MK", + "MT", + "PT", + "RS", + "SI", + "SM", + "VA", + "XK" + ], + "053": [ + "053", + "AU", + "CC", + "CX", + "HM", + "NF", + "NZ" + ], + "054": [ + "054", + "FJ", + "NC", + "PG", + "SB", + "VU" + ], + "057": [ + "057", + "FM", + "GU", + "KI", + "MH", + "MP", + "NR", + "PW", + "UM" + ], + "061": [ + "061", + "AS", + "CK", + "NU", + "PF", + "PN", + "TK", + "TO", + "TV", + "WF", + "WS" + ], + "142": [ + "030", + "034", + "035", + "142", + "143", + "145", + "AE", + "AF", + "AM", + "AZ", + "BD", + "BH", + "BN", + "BT", + "CN", + "CY", + "GE", + "HK", + "ID", + "IL", + "IN", + "IQ", + "IR", + "JO", + "JP", + "KG", + "KH", + "KP", + "KR", + "KW", + "KZ", + "LA", + "LB", + "LK", + "MM", + "MN", + "MO", + "MV", + "MY", + "NP", + "OM", + "PH", + "PK", + "PS", + "QA", + "SA", + "SG", + "SY", + "TH", + "TJ", + "TL", + "TM", + "TR", + "TW", + "UZ", + "VN", + "YE" + ], + "143": [ + "143", + "KG", + "KZ", + "TJ", + "TM", + "UZ" + ], + "145": [ + "145", + "AE", + "AM", + "AZ", + "BH", + "CY", + "GE", + "IL", + "IQ", + "JO", + "KW", + "LB", + "OM", + "PS", + "QA", + "SA", + "SY", + "TR", + "YE" + ], + "150": [ + "039", + "150", + "151", + "154", + "155", + "AD", + "AL", + "AT", + "AX", + "BA", + "BE", + "BG", + "BY", + "CH", + "CQ", + "CZ", + "DE", + "DK", + "EE", + "ES", + "FI", + "FO", + "FR", + "GB", + "GG", + "GI", + "GR", + "HR", + "HU", + "IE", + "IM", + "IS", + "IT", + "JE", + "LI", + "LT", + "LU", + "LV", + "MC", + "MD", + "ME", + "MK", + "MT", + "NL", + "NO", + "PL", + "PT", + "RO", + "RS", + "RU", + "SE", + "SI", + "SJ", + "SK", + "SM", + "UA", + "VA", + "XK" + ], + "151": [ + "151", + "BG", + "BY", + "CZ", + "HU", + "MD", + "PL", + "RO", + "RU", + "SK", + "UA" + ], + "154": [ + "154", + "AX", + "CQ", + "DK", + "EE", + "FI", + "FO", + "GB", + "GG", + "IE", + "IM", + "IS", + "JE", + "LT", + "LV", + "NO", + "SE", + "SJ" + ], + "155": [ + "155", + "AT", + "BE", + "CH", + "DE", + "FR", + "LI", + "LU", + "MC", + "NL" + ], + "202": [ + "011", + "014", + "017", + "018", + "202", + "AO", + "BF", + "BI", + "BJ", + "BW", + "CD", + "CF", + "CG", + "CI", + "CM", + "CV", + "DJ", + "ER", + "ET", + "GA", + "GH", + "GM", + "GN", + "GQ", + "GW", + "IO", + "KE", + "KM", + "LR", + "LS", + "MG", + "ML", + "MR", + "MU", + "MW", + "MZ", + "NA", + "NE", + "NG", + "RE", + "RW", + "SC", + "SH", + "SL", + "SN", + "SO", + "SS", + "ST", + "SZ", + "TD", + "TF", + "TG", + "TZ", + "UG", + "YT", + "ZA", + "ZM", + "ZW" + ], + "419": [ + "005", + "013", + "029", + "419", + "AG", + "AI", + "AR", + "AW", + "BB", + "BL", + "BO", + "BQ", + "BR", + "BS", + "BV", + "BZ", + "CL", + "CO", + "CR", + "CU", + "CW", + "DM", + "DO", + "EC", + "FK", + "GD", + "GF", + "GP", + "GS", + "GT", + "GY", + "HN", + "HT", + "JM", + "KN", + "KY", + "LC", + "MF", + "MQ", + "MS", + "MX", + "NI", + "PA", + "PE", + "PR", + "PY", + "SR", + "SV", + "SX", + "TC", + "TT", + "UY", + "VC", + "VE", + "VG", + "VI" + ], + "EU": [ + "AT", + "BE", + "BG", + "CY", + "CZ", + "DE", + "DK", + "EE", + "ES", + "EU", + "FI", + "FR", + "GR", + "HR", + "HU", + "IE", + "IT", + "LT", + "LU", + "LV", + "MT", + "NL", + "PL", + "PT", + "RO", + "SE", + "SI", + "SK" + ], + "EZ": [ + "AT", + "BE", + "CY", + "DE", + "EE", + "ES", + "EZ", + "FI", + "FR", + "GR", + "IE", + "IT", + "LT", + "LU", + "LV", + "MT", + "NL", + "PT", + "SI", + "SK" + ], + "QO": [ + "AC", + "AQ", + "CP", + "DG", + "QO", + "TA" + ], + "UN": [ + "AD", + "AE", + "AF", + "AG", + "AL", + "AM", + "AO", + "AR", + "AT", + "AU", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BN", + "BO", + "BR", + "BS", + "BT", + "BW", + "BY", + "BZ", + "CA", + "CD", + "CF", + "CG", + "CH", + "CI", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FM", + "FR", + "GA", + "GB", + "GD", + "GE", + "GH", + "GM", + "GN", + "GQ", + "GR", + "GT", + "GW", + "GY", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IN", + "IQ", + "IR", + "IS", + "IT", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MR", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NE", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NZ", + "OM", + "PA", + "PE", + "PG", + "PH", + "PK", + "PL", + "PT", + "PW", + "PY", + "QA", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SI", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SY", + "SZ", + "TD", + "TG", + "TH", + "TJ", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TZ", + "UA", + "UG", + "UN", + "US", + "UY", + "UZ", + "VC", + "VE", + "VN", + "VU", + "WS", + "YE", + "ZA", + "ZM", + "ZW" + ] +}; + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ UNICODE_EXTENSION_SEQUENCE_REGEX: () => (/* binding */ UNICODE_EXTENSION_SEQUENCE_REGEX), +/* harmony export */ findBestMatch: () => (/* binding */ findBestMatch), +/* harmony export */ findMatchingDistance: () => (/* binding */ findMatchingDistance), +/* harmony export */ invariant: () => (/* binding */ invariant) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _languageMatching__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./languageMatching */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/languageMatching.js"); +/* harmony import */ var _regions_generated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./regions.generated */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/regions.generated.js"); + + + +var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi; +function invariant(condition, message, Err) { + if (Err === void 0) { Err = Error; } + if (!condition) { + throw new Err(message); + } +} +// This is effectively 2 languages in 2 different regions in the same cluster +var DEFAULT_MATCHING_THRESHOLD = 838; +var PROCESSED_DATA; +function processData() { + var _a, _b; + if (!PROCESSED_DATA) { + var paradigmLocales = (_b = (_a = _languageMatching__WEBPACK_IMPORTED_MODULE_0__.data.supplemental.languageMatching['written-new'][0]) === null || _a === void 0 ? void 0 : _a.paradigmLocales) === null || _b === void 0 ? void 0 : _b._locales.split(' '); + var matchVariables = _languageMatching__WEBPACK_IMPORTED_MODULE_0__.data.supplemental.languageMatching['written-new'].slice(1, 5); + var data = _languageMatching__WEBPACK_IMPORTED_MODULE_0__.data.supplemental.languageMatching['written-new'].slice(5); + var matches = data.map(function (d) { + var key = Object.keys(d)[0]; + var value = d[key]; + return { + supported: key, + desired: value._desired, + distance: +value._distance, + oneway: value.oneway === 'true' ? true : false, + }; + }, {}); + PROCESSED_DATA = { + matches: matches, + matchVariables: matchVariables.reduce(function (all, d) { + var key = Object.keys(d)[0]; + var value = d[key]; + all[key.slice(1)] = value._value.split('+'); + return all; + }, {}), + paradigmLocales: (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__spreadArray)((0,tslib__WEBPACK_IMPORTED_MODULE_2__.__spreadArray)([], paradigmLocales, true), paradigmLocales.map(function (l) { + return new Intl.Locale(l.replace(/_/g, '-')).maximize().toString(); + }), true), + }; + } + return PROCESSED_DATA; +} +function isMatched(locale, languageMatchInfoLocale, matchVariables) { + var _a = languageMatchInfoLocale.split('-'), language = _a[0], script = _a[1], region = _a[2]; + var matches = true; + if (region && region[0] === '$') { + var shouldInclude = region[1] !== '!'; + var matchRegions = shouldInclude + ? matchVariables[region.slice(1)] + : matchVariables[region.slice(2)]; + var expandedMatchedRegions = matchRegions + .map(function (r) { return _regions_generated__WEBPACK_IMPORTED_MODULE_1__.regions[r] || [r]; }) + .reduce(function (all, list) { return (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__spreadArray)((0,tslib__WEBPACK_IMPORTED_MODULE_2__.__spreadArray)([], all, true), list, true); }, []); + matches && (matches = !(expandedMatchedRegions.indexOf(locale.region || '') > 1 != + shouldInclude)); + } + else { + matches && (matches = locale.region + ? region === '*' || region === locale.region + : true); + } + matches && (matches = locale.script ? script === '*' || script === locale.script : true); + matches && (matches = locale.language + ? language === '*' || language === locale.language + : true); + return matches; +} +function serializeLSR(lsr) { + return [lsr.language, lsr.script, lsr.region].filter(Boolean).join('-'); +} +function findMatchingDistanceForLSR(desired, supported, data) { + for (var _i = 0, _a = data.matches; _i < _a.length; _i++) { + var d = _a[_i]; + var matches = isMatched(desired, d.desired, data.matchVariables) && + isMatched(supported, d.supported, data.matchVariables); + if (!d.oneway && !matches) { + matches = + isMatched(desired, d.supported, data.matchVariables) && + isMatched(supported, d.desired, data.matchVariables); + } + if (matches) { + var distance = d.distance * 10; + if (data.paradigmLocales.indexOf(serializeLSR(desired)) > -1 != + data.paradigmLocales.indexOf(serializeLSR(supported)) > -1) { + return distance - 1; + } + return distance; + } + } + throw new Error('No matching distance found'); +} +function findMatchingDistance(desired, supported) { + var desiredLocale = new Intl.Locale(desired).maximize(); + var supportedLocale = new Intl.Locale(supported).maximize(); + var desiredLSR = { + language: desiredLocale.language, + script: desiredLocale.script || '', + region: desiredLocale.region || '', + }; + var supportedLSR = { + language: supportedLocale.language, + script: supportedLocale.script || '', + region: supportedLocale.region || '', + }; + var matchingDistance = 0; + var data = processData(); + if (desiredLSR.language !== supportedLSR.language) { + matchingDistance += findMatchingDistanceForLSR({ + language: desiredLocale.language, + script: '', + region: '', + }, { + language: supportedLocale.language, + script: '', + region: '', + }, data); + } + if (desiredLSR.script !== supportedLSR.script) { + matchingDistance += findMatchingDistanceForLSR({ + language: desiredLocale.language, + script: desiredLSR.script, + region: '', + }, { + language: supportedLocale.language, + script: desiredLSR.script, + region: '', + }, data); + } + if (desiredLSR.region !== supportedLSR.region) { + matchingDistance += findMatchingDistanceForLSR(desiredLSR, supportedLSR, data); + } + return matchingDistance; +} +function findBestMatch(requestedLocales, supportedLocales, threshold) { + if (threshold === void 0) { threshold = DEFAULT_MATCHING_THRESHOLD; } + var lowestDistance = Infinity; + var result = { + matchedDesiredLocale: '', + distances: {}, + }; + requestedLocales.forEach(function (desired, i) { + if (!result.distances[desired]) { + result.distances[desired] = {}; + } + supportedLocales.forEach(function (supported) { + // Add some weight to the distance based on the order of the supported locales + // Add penalty for the order of the requested locales, which currently is 0 since ECMA-402 + // doesn't really have room for weighted locales like `en; q=0.1` + var distance = findMatchingDistance(desired, supported) + 0 + i * 40; + result.distances[desired][supported] = distance; + if (distance < lowestDistance) { + lowestDistance = distance; + result.matchedDesiredLocale = desired; + result.matchedSupportedLocale = supported; + } + }); + }); + if (lowestDistance >= threshold) { + result.matchedDesiredLocale = undefined; + result.matchedSupportedLocale = undefined; + } + return result; +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-localematcher/lib/index.js": +/*!****************************************************************!*\ + !*** ./node_modules/@formatjs/intl-localematcher/lib/index.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ LookupSupportedLocales: () => (/* reexport safe */ _abstract_LookupSupportedLocales__WEBPACK_IMPORTED_MODULE_2__.LookupSupportedLocales), +/* harmony export */ ResolveLocale: () => (/* reexport safe */ _abstract_ResolveLocale__WEBPACK_IMPORTED_MODULE_1__.ResolveLocale), +/* harmony export */ match: () => (/* binding */ match) +/* harmony export */ }); +/* harmony import */ var _abstract_CanonicalizeLocaleList__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./abstract/CanonicalizeLocaleList */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeLocaleList.js"); +/* harmony import */ var _abstract_ResolveLocale__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./abstract/ResolveLocale */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/ResolveLocale.js"); +/* harmony import */ var _abstract_LookupSupportedLocales__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./abstract/LookupSupportedLocales */ "./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupSupportedLocales.js"); + + +function match(requestedLocales, availableLocales, defaultLocale, opts) { + return (0,_abstract_ResolveLocale__WEBPACK_IMPORTED_MODULE_1__.ResolveLocale)(availableLocales, (0,_abstract_CanonicalizeLocaleList__WEBPACK_IMPORTED_MODULE_0__.CanonicalizeLocaleList)(requestedLocales), { + localeMatcher: (opts === null || opts === void 0 ? void 0 : opts.algorithm) || 'best fit', + }, [], {}, function () { return defaultLocale; }).locale; +} + + + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-segmenter/polyfill.js": +/*!***********************************************************!*\ + !*** ./node_modules/@formatjs/intl-segmenter/polyfill.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var segmenter_1 = __webpack_require__(/*! ./src/segmenter */ "./node_modules/@formatjs/intl-segmenter/src/segmenter.js"); +var should_polyfill_1 = __webpack_require__(/*! ./should-polyfill */ "./node_modules/@formatjs/intl-segmenter/should-polyfill.js"); +if ((0, should_polyfill_1.shouldPolyfill)()) { + Object.defineProperty(Intl, 'Segmenter', { + value: segmenter_1.Segmenter, + enumerable: false, + writable: true, + configurable: true, + }); +} + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-segmenter/should-polyfill.js": +/*!******************************************************************!*\ + !*** ./node_modules/@formatjs/intl-segmenter/should-polyfill.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.shouldPolyfill = void 0; +function shouldPolyfill() { + return !Intl.Segmenter; +} +exports.shouldPolyfill = shouldPolyfill; + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-segmenter/src/cldr-segmentation-rules.generated.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-segmenter/src/cldr-segmentation-rules.generated.js ***! + \****************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SegmentationRules = void 0; +/* @generated */ +// prettier-ignore +exports.SegmentationRules = { + "de": { + "sentence": { + "segmentRules": {}, + "suppressions": [ + "Port.", + "Alt.", + "Di.", + "Ges.", + "frz.", + "entspr.", + "Gebr.", + "erw.", + "Frl.", + "Inh.", + "k.u.k.", + "Ca.", + "J.D.", + "Ausg.", + "evtl.", + "So.", + "i.B.", + "s.a.", + "kgl.", + "Sept.", + "o.B.", + "Sa.", + "ev.", + "Dez.", + "am.", + "i.R.", + "eigtl.", + "i.J.", + "u.U.", + "G.", + "z.Hd.", + "u.A.w.g.", + "Kl.", + "Spezif.", + "Obj.", + "Ing.", + "D. h.", + "Folg.", + "Akt.", + "i.A.", + "Msp.", + "U.U.", + "Chr.", + "R.", + "Einh.", + "schwäb.", + "Vgl.", + "Aug.", + "Dipl.-Ing.", + "W.", + "B.", + "U. U.", + "J.", + "Fa.", + "Mo.", + "n.u.Z.", + "Op.", + "Mrd.", + "e.h.", + "Hr.", + "Hrn.", + "Ztr.", + "k. u. k.", + "Bibl.", + "d.Ä.", + "b.", + "M.", + "i.H.", + "v.R.w.", + "o.A.", + "St.", + "Dr.", + "Fn.", + "Abs.", + "Rd.", + "Dtzd.", + "Jahrh.", + "Z.", + "Std.", + "n. Chr.", + "möbl.", + "tägl.", + "gest.", + "gesch.", + "z.B.", + "Hbf.", + "Abt.", + "A.M.", + "e.Wz.", + "v.T.", + "Nov.", + "z.", + "Prot.", + "U.S.", + "Wg.", + "u.v.a.", + "Adr.", + "App.", + "ggf.", + "ggfs.", + "Jan.", + "O.", + "Rel.", + "od.", + "Pfd.", + "a.a.O.", + "p.Adr.", + "P.", + "Gem.", + "v. Chr.", + "Art.", + "z.Z.", + "S.A.", + "i.V.", + "verh.", + "Ausschl.", + "m.W.", + "Dir.", + "Verf.", + "Sek.", + "r.", + "Chin.", + "Feb.", + "Int.", + "Sep.", + "Gesch.", + "schweiz.", + "Bed.", + "a.Rh.", + "jew.", + "vgl.", + "a.M.", + "Str.", + "exkl.", + "gek.", + "Erf.", + "u.Ä.", + "ehem.", + "näml.", + "u. Z.", + "v. u. Z.", + "sog.", + "C.", + "Dipl.-Kfm.", + "mtl.", + "Hrsg.", + "Qu.", + "röm.", + "u.", + "U.", + "Adj.", + "Kap.", + "hpts.", + "a.D.", + "gedr.", + "Best.", + "N.", + "v.u.Z.", + "Phys.", + "Fr.", + "d.J.", + "Reg.-Bez.", + "m.E.", + "schles.", + "Max.", + "Ltd.", + "südd.", + "inkl.", + "geb.", + "Ggf.", + "Inc.", + "kath.", + "kfm.", + "Nr.", + "Proz.", + "Dim.", + "verw.", + "Reg.", + "Dat.", + "Evtl.", + "led.", + "F.", + "Test.", + "Schr.", + "Do.", + "PIN.", + "Z. Zt.", + "v.Chr.", + "Tägl.", + "s.", + "amtl.", + "Temp.", + "Mind.", + "e.V.", + "Abw.", + "P.M.", + "F.f.", + "a.a.S.", + "Mod.", + "Co.", + "Min.", + "Allg.", + "Geograph.", + "Jr.", + "Urspr.", + "Apr.", + "Z. B.", + "v.H.", + "A.", + "einschl.", + "Trans.", + "zzgl.", + "StR.", + "Fam.", + "I.", + "jhrl.", + "u.a.", + "Ben.", + "o.g.", + "Kfm.", + "Konv.", + "Mi.", + "L.", + "beil.", + "T.", + "Ursprüngl.", + "röm.-kath.", + "Okt.", + "u.ä.", + "Tel.", + "D.", + "Ber.", + "Kop.", + "Mio.", + "Y.", + "U.S.A.", + "v. H.", + "Forts. f.", + "Rep.", + "Hptst.", + "österr." + ], + "variables": {} + } + }, + "el": { + "sentence": { + "segmentRules": {}, + "suppressions": [], + "variables": { + "$STerm": "((?:[!;\\?\\u037E\\u0589\\u061D-\\u061F\\u06D4\\u0700-\\u0702\\u07F9\\u0837\\u0839\\u083D\\u083E\\u0964\\u0965\\u104A\\u104B\\u1362\\u1367\\u1368\\u166E\\u1735\\u1736\\u1803\\u1809\\u1944\\u1945\\u1AA8-\\u1AAB\\u1B5A\\u1B5B\\u1B5E\\u1B5F\\u1B7D\\u1B7E\\u1C3B\\u1C3C\\u1C7E\\u1C7F\\u203C\\u203D\\u2047-\\u2049\\u2E2E\\u2E3C\\u2E53\\u2E54\\u3002\\uA4FF\\uA60E\\uA60F\\uA6F3\\uA6F7\\uA876\\uA877\\uA8CE\\uA8CF\\uA92F\\uA9C8\\uA9C9\\uAA5D-\\uAA5F\\uAAF0\\uAAF1\\uABEB\\uFE56\\uFE57\\uFF01\\uFF1F\\uFF61]|\\uD802[\\uDE56\\uDE57]|\\uD803[\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47\\uDC48\\uDCBE-\\uDCC1\\uDD41-\\uDD43\\uDDC5\\uDDC6\\uDDCD\\uDDDE\\uDDDF\\uDE38\\uDE39\\uDE3B\\uDE3C\\uDEA9]|\\uD805[\\uDC4B\\uDC4C\\uDDC2\\uDDC3\\uDDC9-\\uDDD7\\uDE41\\uDE42\\uDF3C-\\uDF3E]|\\uD806[\\uDD44\\uDD46\\uDE42\\uDE43\\uDE9B\\uDE9C]|\\uD807[\\uDC41\\uDC42\\uDEF7\\uDEF8\\uDF43\\uDF44]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37\\uDF38\\uDF44]|\\uD81B\\uDE98|\\uD82F\\uDC9F|\\uD836\\uDE88)(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)" + } + } + }, + "en": { + "sentence": { + "segmentRules": {}, + "suppressions": [ + "L.P.", + "Alt.", + "Approx.", + "E.G.", + "O.", + "Maj.", + "Misc.", + "P.O.", + "J.D.", + "Jam.", + "Card.", + "Dec.", + "Sept.", + "MR.", + "Long.", + "Hat.", + "G.", + "Link.", + "DC.", + "D.C.", + "M.T.", + "Hz.", + "Mrs.", + "By.", + "Act.", + "Var.", + "N.V.", + "Aug.", + "B.", + "S.A.", + "Up.", + "Job.", + "Num.", + "M.I.T.", + "Ok.", + "Org.", + "Ex.", + "Cont.", + "U.", + "Mart.", + "Fn.", + "Abs.", + "Lt.", + "OK.", + "Z.", + "E.", + "Kb.", + "Est.", + "A.M.", + "L.A.", + "Prof.", + "U.S.", + "Nov.", + "Ph.D.", + "Mar.", + "I.T.", + "exec.", + "Jan.", + "N.Y.", + "X.", + "Md.", + "Op.", + "vs.", + "D.A.", + "A.D.", + "R.L.", + "P.M.", + "Or.", + "M.R.", + "Cap.", + "PC.", + "Feb.", + "Exec.", + "I.e.", + "Sep.", + "Gb.", + "K.", + "U.S.C.", + "Mt.", + "S.", + "A.S.", + "C.O.D.", + "Capt.", + "Col.", + "In.", + "C.F.", + "Adj.", + "AD.", + "I.D.", + "Mgr.", + "R.T.", + "B.V.", + "M.", + "Conn.", + "Yr.", + "Rev.", + "Phys.", + "pp.", + "Ms.", + "To.", + "Sgt.", + "J.K.", + "Nr.", + "Jun.", + "Fri.", + "S.A.R.", + "Lev.", + "Lt.Cdr.", + "Def.", + "F.", + "Do.", + "Joe.", + "Id.", + "Mr.", + "Dept.", + "Is.", + "Pvt.", + "Diff.", + "Hon.B.A.", + "Q.", + "Mb.", + "On.", + "Min.", + "J.B.", + "Ed.", + "AB.", + "A.", + "S.p.A.", + "I.", + "a.m.", + "Comm.", + "Go.", + "VS.", + "L.", + "All.", + "PP.", + "P.V.", + "T.", + "K.R.", + "Etc.", + "D.", + "Adv.", + "Lib.", + "E.g.", + "Pro.", + "U.S.A.", + "S.E.", + "AA.", + "Rep.", + "Sq.", + "As." + ], + "variables": {} + } + }, + "es": { + "sentence": { + "segmentRules": {}, + "suppressions": [ + "Rdos.", + "JJ.OO.", + "Sres.", + "fig.", + "may.", + "RR.HH.", + "oct.", + "cap.", + "mié.", + "doc.", + "Excmo.", + "Trab.", + "Excmos.", + "Kit.", + "Inc.", + "FF.CC.", + "DC.", + "ago.", + "trad.", + "SA.", + "Rvdos.", + "ed.", + "Exmo.", + "jul.", + "col.", + "RAM.", + "Srtas.", + "ene.", + "Rol.", + "Fabric.", + "Comm.", + "vid.", + "Da.", + "dic.", + "ss.", + "abr.", + "ntra.", + "Sra.", + "dtor.", + "cf.", + "dom.", + "prov.", + "Emm.", + "Sr.", + "licdo.", + "p.ej.", + "bol.", + "figs.", + "Vda.", + "Dr.", + "ntro.", + "Desv.", + "O.M.", + "Ldo.", + "Drs.", + "sáb.", + "feb.", + "Ltda.", + "Lcda.", + "Exma.", + "C.V.", + "SS.MM.", + "Lda.", + "U.S.", + "hnos.", + "R.D.", + "Korn.", + "v.gr.", + "vs.", + "Ilmas.", + "Rdo.", + "ej.", + "vie.", + "jue.", + "a. C.", + "Ilmos.", + "e. c.", + "Excma.", + "afma.", + "licda.", + "Em.", + "K.", + "sras.", + "MM.", + "fund.", + "Mons.", + "Lcdo.", + "afmo.", + "C.", + "A.C.", + "dptos.", + "Col.", + "Srta.", + "Av.", + "Ant.", + "depto.", + "Var.", + "H.P.", + "D.", + "M.", + "C.P.", + "Rev.", + "Rvdmos.", + "Fr.", + "Ilmo.", + "afmos.", + "Ltd.", + "afmas.", + "prof.", + "lun.", + "SS.AA.", + "Sol.", + "nov.", + "mss.", + "Dña.", + "Seg.", + "mar.", + "Rvdmo.", + "Reg.", + "ms.", + "Sras.", + "sres.", + "U.S.A.", + "Sta.", + "Sdad.", + "Dra.", + "srs.", + "R.U.", + "deptos.", + "dpto.", + "jun.", + "bco.", + "Cía.", + "Id.", + "Mr.", + "e.g.", + "C.S.", + "Excmas.", + "Dª.", + "Rvdo.", + "Lic.", + "cfr.", + "Corp.", + "Dto.", + "Ilma.", + "L.", + "All.", + "PP.", + "d. C.", + "Ltdo.", + "mtro.", + "Mrs.", + "Desc.", + "Avda.", + "Exmas.", + "a. e. c.", + "Bien.", + "Exmos.", + "AA.", + "Sto.", + "CA.", + "sept.", + "Exc.", + "c/c." + ], + "variables": {} + } + }, + "fr": { + "sentence": { + "segmentRules": {}, + "suppressions": [ + "aux.", + "config.", + "collab.", + "M.", + "dim.", + "imprim.", + "oct.", + "syst.", + "bull.", + "MM.", + "doc.", + "P.O.", + "hôp.", + "Mart.", + "juil.", + "broch.", + "adr.", + "symb.", + "C.", + "anc.", + "voit.", + "Jr.", + "graph.", + "dir.", + "éd.", + "fig.", + "édit.", + "niv.", + "quart.", + "cam.", + "éval.", + "anon.", + "réf.", + "Comm.", + "Prof.", + "févr.", + "indus.", + "DC.", + "équiv.", + "illustr.", + "acoust.", + "nov.", + "L.", + "All.", + "U.S.", + "S.M.A.R.T.", + "sept.", + "avr.", + "jeu.", + "dest.", + "P.-D. G.", + "ill.", + "coll.", + "encycl.", + "mer.", + "Desc.", + "ven.", + "P.", + "lun.", + "Inc.", + "sam.", + "D.", + "append.", + "Var.", + "categ.", + "janv.", + "S.A.", + "imm.", + "U.S.A.", + "mar.", + "exempl.", + "déc.", + "ann.", + "U.", + "synth.", + "dict.", + "av. J.-C.", + "W.", + "Op.", + "ap. J.-C.", + "gouv.", + "trav. publ." + ], + "variables": {} + } + }, + "it": { + "sentence": { + "segmentRules": {}, + "suppressions": [ + "N.B.", + "div.", + "a.C.", + "fig.", + "d.p.R.", + "c.c.p.", + "Cfr.", + "vol.", + "Geom.", + "O.d.G.", + "S.p.A.", + "ver.", + "N.d.A.", + "dott.", + "arch.", + "d.C.", + "N.d.T.", + "rag.", + "Sig.", + "Mod.", + "pag.", + "dr.", + "tav.", + "N.d.E.", + "DC.", + "mitt.", + "Ing.", + "int.", + "on.", + "C.P.", + "ag.", + "L.", + "U.S.", + "S.M.A.R.T.", + "p.i.", + "tab.", + "Ltd.", + "Liv.", + "D.", + "U.S.A.", + "sez.", + "avv.", + "S.A.R.", + "all.", + "p." + ], + "variables": {} + } + }, + "ja": { + "word": { + "segmentRules": { + "13.3": { + "after": "$Hiragana", + "before": "$Hiragana", + "breaks": false + }, + "13.4": { + "after": "$Ideographic", + "before": "$Ideographic", + "breaks": false + } + }, + "suppressions": [], + "variables": { + "$Hiragana": "((?:[\\u3041-\\u3096\\u309D-\\u309F]|\\uD82C[\\uDC01-\\uDD1F\\uDD32\\uDD50-\\uDD52]|\\uD83C\\uDE00)(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$Ideographic": "((?:[\\u3005-\\u3007\\u3021-\\u3029\\u3038-\\u303B\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFA6D\\uFA70-\\uFAD9]|\\uD81B\\uDFE4|[\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883\\uD885-\\uD887][\\uDC00-\\uDFFF]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDD70-\\uDEFB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF39\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A\\uDF50-\\uDFFF]|\\uD888[\\uDC00-\\uDFAF])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)" + } + } + }, + "pt": { + "sentence": { + "segmentRules": {}, + "suppressions": [ + "psicol.", + "fig.", + "compl.", + "rep.", + "cap.", + "doc.", + "fisiol.", + "dipl.", + "astron.", + "port.", + "eletrôn.", + "geom.", + "mov.", + "ago.", + "trad.", + "arquit.", + "dez.", + "ed.", + "apt.", + "Exmo.", + "col.", + "ff.", + "univ.", + "res.", + "R.", + "transp.", + "D.C", + "l.", + "des.", + "fev.", + "abr.", + "liter.", + "lat.", + "Dir.", + "cf.", + "adm.", + "fot.", + "p.m.", + "P.M.", + "créd.", + "jur.", + "com.", + "anat.", + "dir.", + "end.", + "fís.", + "E.", + "Est.", + "cont.", + "matem.", + "Drs.", + "gên.", + "neol.", + "pág.", + "índ.", + "Ltda.", + "Exma.", + "esp.", + "ingl.", + "tecnol.", + "Mar.", + "símb.", + "Pe.", + "pal.", + "filos.", + "V.T.", + "fasc.", + "vs.", + "mai.", + "S.A.", + "profa.", + "N.Sra.", + "r.s.v.p.", + "cel.", + "mat.", + "abrev.", + "out.", + "long.", + "aux.", + "arit.", + "aer.", + "jul.", + "lin.", + "S.", + "méd.", + "odontol.", + "org.", + "A.C.", + "jun.", + "déb.", + "Av.", + "álg.", + "sup.", + "fl.", + "odont.", + "caps.", + "relat.", + "organiz.", + "hist.", + "Fr.", + "Ilmo.", + "fem.", + "ap.", + "Ltd.", + "pol.", + "séc.", + "prof.", + "cx.", + "nov.", + "quím.", + "mús.", + "agric.", + "mar.", + "W.C.", + "fr.", + "cat.", + "jan.", + "pron.", + "rel.", + "autom.", + "Sta.", + "Dra.", + "p.", + "tel.", + "div.", + "p. ex.", + "a.C.", + "bras.", + "Alm.", + "Dr.", + "comp.", + "pq.", + "arqueol.", + "náut.", + "biogr.", + "f.", + "círc.", + "fac.", + "d.C.", + "apart.", + "ex.", + "Jr.", + "set.", + "tec.", + "sociol.", + "gram.", + "ind.", + "Ilma.", + "vol.", + "eng.", + "rod.", + "Ph.D.", + "Dras.", + "pp.", + "elem.", + "máq.", + "cód.", + "eletr.", + "prod.", + "ref.", + "fil.", + "a.m.", + "A.M", + "obs.", + "N.T.", + "contab.", + "Sto.", + "lit.", + "educ.", + "rementente", + "desc.", + "próx." + ], + "variables": {} + } + }, + "root": { + "grapheme": { + "segmentRules": { + "11": { + "after": "$ExtPict", + "before": "$ExtPict$Extend*$ZWJ", + "breaks": false + }, + "12": { + "after": "$RI", + "before": "^($RI$RI)*$RI", + "breaks": false + }, + "13": { + "after": "$RI", + "before": "[^\\uDDE6-\\uDDFF]($RI$RI)*$RI", + "breaks": false + }, + "3": { + "after": "$LF", + "before": "$CR", + "breaks": false + }, + "4": { + "before": "($Control|$CR|$LF)", + "breaks": true + }, + "5": { + "after": "($Control|$CR|$LF)", + "breaks": true + }, + "6": { + "after": "($L|$V|$LV|$LVT)", + "before": "$L", + "breaks": false + }, + "7": { + "after": "($V|$T)", + "before": "($LV|$V)", + "breaks": false + }, + "8": { + "after": "$T", + "before": "($LVT|$T)", + "breaks": false + }, + "9": { + "after": "($Extend|$ZWJ)", + "breaks": false + }, + "9.1": { + "after": "$SpacingMark", + "breaks": false + }, + "9.2": { + "before": "$Prepend", + "breaks": false + }, + "9.3": { + "after": "$LinkingConsonant", + "before": "$LinkingConsonant$ExtCccZwj*$Virama$ExtCccZwj*", + "breaks": false + } + }, + "suppressions": [], + "variables": { + "$CR": "\\r", + "$Control": "(?:[\\0-\\t\\x0B\\f\\x0E-\\x1F\\x7F-\\x9F\\xAD\\u061C\\u180E\\u200B\\u200E\\u200F\\u2028-\\u202E\\u2060-\\u206F\\uFEFF\\uFFF0-\\uFFFB]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC00-\\uDC1F\\uDC80-\\uDCFF\\uDDF0-\\uDFFF]|[\\uDB41-\\uDB43][\\uDC00-\\uDFFF])", + "$ExtCccZwj": "(?:[\\u0300-\\u034E\\u0350-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u08FF\\u093C\\u094D\\u0951-\\u0954\\u09BC\\u09CD\\u09FE\\u0A3C\\u0A4D\\u0ABC\\u0ACD\\u0B3C\\u0B4D\\u0BCD\\u0C3C\\u0C4D\\u0C55\\u0C56\\u0CBC\\u0CCD\\u0D3B\\u0D3C\\u0D4D\\u0DCA\\u0E38-\\u0E3A\\u0E48-\\u0E4B\\u0EB8-\\u0EBA\\u0EC8-\\u0ECB\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71\\u0F72\\u0F74\\u0F7A-\\u0F7D\\u0F80\\u0F82-\\u0F84\\u0F86\\u0F87\\u0FC6\\u1037\\u1039\\u103A\\u108D\\u135D-\\u135F\\u1714\\u17D2\\u17DD\\u18A9\\u1939-\\u193B\\u1A17\\u1A18\\u1A60\\u1A75-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1ABF-\\u1ACE\\u1B34\\u1B6B-\\u1B73\\u1BAB\\u1BE6\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DFF\\u200D\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA806\\uA82C\\uA8C4\\uA8E0-\\uA8F1\\uA92B-\\uA92D\\uA9B3\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAF6\\uABED\\uFB1E\\uFE20-\\uFE2F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE0D\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC46\\uDC70\\uDC7F\\uDCB9\\uDCBA\\uDD00-\\uDD02\\uDD33\\uDD34\\uDD73\\uDDCA\\uDE36\\uDEE9\\uDEEA\\uDF3B\\uDF3C\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC42\\uDC46\\uDC5E\\uDCC2\\uDCC3\\uDDBF\\uDDC0\\uDE3F\\uDEB7\\uDF2B]|\\uD806[\\uDC39\\uDC3A\\uDD3E\\uDD43\\uDDE0\\uDE34\\uDE47\\uDE99]|\\uD807[\\uDC3F\\uDD42\\uDD44\\uDD45\\uDD97\\uDF42]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD82F\\uDC9E|\\uD834[\\uDD65\\uDD67-\\uDD69\\uDD6E-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A])", + "$ExtPict": "(?:[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u2388\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2605\\u2607-\\u2612\\u2614-\\u2685\\u2690-\\u2705\\u2708-\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2767\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC00-\\uDCFF\\uDD0D-\\uDD0F\\uDD2F\\uDD6C-\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDAD-\\uDDE5\\uDE01-\\uDE0F\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE3C-\\uDE3F\\uDE49-\\uDFFA]|\\uD83D[\\uDC00-\\uDD3D\\uDD46-\\uDE4F\\uDE80-\\uDEFF\\uDF74-\\uDF7F\\uDFD5-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE-\\uDCFF\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDEFF]|\\uD83F[\\uDC00-\\uDFFD])", + "$Extend": "(?:[\\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\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962\\u0963\\u0981\\u09BC\\u09BE\\u09C1-\\u09C4\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01\\u0B3C\\u0B3E\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE\\u0BC0\\u0BCD\\u0BD7\\u0C00\\u0C04\\u0C3C\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC2\\u0CC6\\u0CCC\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D00\\u0D01\\u0D3B\\u0D3C\\u0D3E\\u0D41-\\u0D44\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81\\u0DCA\\u0DCF\\u0DD2-\\u0DD4\\u0DD6\\u0DDF\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732\\u1733\\u1752\\u1753\\u1772\\u1773\\u17B4\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B03\\u1B34-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA82C\\uA8C4\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9BD\\uA9E5\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEC\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFF9E\\uFF9F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC01\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC81\\uDCB3-\\uDCB6\\uDCB9\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD2B\\uDD2D-\\uDD34\\uDD73\\uDD80\\uDD81\\uDDB6-\\uDDBE\\uDDC9-\\uDDCC\\uDDCF\\uDE2F-\\uDE31\\uDE34\\uDE36\\uDE37\\uDE3E\\uDE41\\uDEDF\\uDEE3-\\uDEEA\\uDF00\\uDF01\\uDF3B\\uDF3C\\uDF3E\\uDF40\\uDF57\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC38-\\uDC3F\\uDC42-\\uDC44\\uDC46\\uDC5E\\uDCB0\\uDCB3-\\uDCB8\\uDCBA\\uDCBD\\uDCBF\\uDCC0\\uDCC2\\uDCC3\\uDDAF\\uDDB2-\\uDDB5\\uDDBC\\uDDBD\\uDDBF\\uDDC0\\uDDDC\\uDDDD\\uDE33-\\uDE3A\\uDE3D\\uDE3F\\uDE40\\uDEAB\\uDEAD\\uDEB0-\\uDEB5\\uDEB7\\uDF1D-\\uDF1F\\uDF22-\\uDF25\\uDF27-\\uDF2B]|\\uD806[\\uDC2F-\\uDC37\\uDC39\\uDC3A\\uDD30\\uDD3B\\uDD3C\\uDD3E\\uDD43\\uDDD4-\\uDDD7\\uDDDA\\uDDDB\\uDDE0\\uDE01-\\uDE0A\\uDE33-\\uDE38\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE56\\uDE59-\\uDE5B\\uDE8A-\\uDE96\\uDE98\\uDE99]|\\uD807[\\uDC30-\\uDC36\\uDC38-\\uDC3D\\uDC3F\\uDC92-\\uDCA7\\uDCAA-\\uDCB0\\uDCB2\\uDCB3\\uDCB5\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD90\\uDD91\\uDD95\\uDD97\\uDEF3\\uDEF4\\uDF00\\uDF01\\uDF36-\\uDF3A\\uDF40\\uDF42]|\\uD80D[\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF8F-\\uDF92\\uDFE4]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65\\uDD67-\\uDD69\\uDD6E-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC20-\\uDC7F\\uDD00-\\uDDEF])", + "$L": "[\\u1100-\\u115F\\uA960-\\uA97C]", + "$LF": "\\n", + "$LV": "[\\uAC00\\uAC1C\\uAC38\\uAC54\\uAC70\\uAC8C\\uACA8\\uACC4\\uACE0\\uACFC\\uAD18\\uAD34\\uAD50\\uAD6C\\uAD88\\uADA4\\uADC0\\uADDC\\uADF8\\uAE14\\uAE30\\uAE4C\\uAE68\\uAE84\\uAEA0\\uAEBC\\uAED8\\uAEF4\\uAF10\\uAF2C\\uAF48\\uAF64\\uAF80\\uAF9C\\uAFB8\\uAFD4\\uAFF0\\uB00C\\uB028\\uB044\\uB060\\uB07C\\uB098\\uB0B4\\uB0D0\\uB0EC\\uB108\\uB124\\uB140\\uB15C\\uB178\\uB194\\uB1B0\\uB1CC\\uB1E8\\uB204\\uB220\\uB23C\\uB258\\uB274\\uB290\\uB2AC\\uB2C8\\uB2E4\\uB300\\uB31C\\uB338\\uB354\\uB370\\uB38C\\uB3A8\\uB3C4\\uB3E0\\uB3FC\\uB418\\uB434\\uB450\\uB46C\\uB488\\uB4A4\\uB4C0\\uB4DC\\uB4F8\\uB514\\uB530\\uB54C\\uB568\\uB584\\uB5A0\\uB5BC\\uB5D8\\uB5F4\\uB610\\uB62C\\uB648\\uB664\\uB680\\uB69C\\uB6B8\\uB6D4\\uB6F0\\uB70C\\uB728\\uB744\\uB760\\uB77C\\uB798\\uB7B4\\uB7D0\\uB7EC\\uB808\\uB824\\uB840\\uB85C\\uB878\\uB894\\uB8B0\\uB8CC\\uB8E8\\uB904\\uB920\\uB93C\\uB958\\uB974\\uB990\\uB9AC\\uB9C8\\uB9E4\\uBA00\\uBA1C\\uBA38\\uBA54\\uBA70\\uBA8C\\uBAA8\\uBAC4\\uBAE0\\uBAFC\\uBB18\\uBB34\\uBB50\\uBB6C\\uBB88\\uBBA4\\uBBC0\\uBBDC\\uBBF8\\uBC14\\uBC30\\uBC4C\\uBC68\\uBC84\\uBCA0\\uBCBC\\uBCD8\\uBCF4\\uBD10\\uBD2C\\uBD48\\uBD64\\uBD80\\uBD9C\\uBDB8\\uBDD4\\uBDF0\\uBE0C\\uBE28\\uBE44\\uBE60\\uBE7C\\uBE98\\uBEB4\\uBED0\\uBEEC\\uBF08\\uBF24\\uBF40\\uBF5C\\uBF78\\uBF94\\uBFB0\\uBFCC\\uBFE8\\uC004\\uC020\\uC03C\\uC058\\uC074\\uC090\\uC0AC\\uC0C8\\uC0E4\\uC100\\uC11C\\uC138\\uC154\\uC170\\uC18C\\uC1A8\\uC1C4\\uC1E0\\uC1FC\\uC218\\uC234\\uC250\\uC26C\\uC288\\uC2A4\\uC2C0\\uC2DC\\uC2F8\\uC314\\uC330\\uC34C\\uC368\\uC384\\uC3A0\\uC3BC\\uC3D8\\uC3F4\\uC410\\uC42C\\uC448\\uC464\\uC480\\uC49C\\uC4B8\\uC4D4\\uC4F0\\uC50C\\uC528\\uC544\\uC560\\uC57C\\uC598\\uC5B4\\uC5D0\\uC5EC\\uC608\\uC624\\uC640\\uC65C\\uC678\\uC694\\uC6B0\\uC6CC\\uC6E8\\uC704\\uC720\\uC73C\\uC758\\uC774\\uC790\\uC7AC\\uC7C8\\uC7E4\\uC800\\uC81C\\uC838\\uC854\\uC870\\uC88C\\uC8A8\\uC8C4\\uC8E0\\uC8FC\\uC918\\uC934\\uC950\\uC96C\\uC988\\uC9A4\\uC9C0\\uC9DC\\uC9F8\\uCA14\\uCA30\\uCA4C\\uCA68\\uCA84\\uCAA0\\uCABC\\uCAD8\\uCAF4\\uCB10\\uCB2C\\uCB48\\uCB64\\uCB80\\uCB9C\\uCBB8\\uCBD4\\uCBF0\\uCC0C\\uCC28\\uCC44\\uCC60\\uCC7C\\uCC98\\uCCB4\\uCCD0\\uCCEC\\uCD08\\uCD24\\uCD40\\uCD5C\\uCD78\\uCD94\\uCDB0\\uCDCC\\uCDE8\\uCE04\\uCE20\\uCE3C\\uCE58\\uCE74\\uCE90\\uCEAC\\uCEC8\\uCEE4\\uCF00\\uCF1C\\uCF38\\uCF54\\uCF70\\uCF8C\\uCFA8\\uCFC4\\uCFE0\\uCFFC\\uD018\\uD034\\uD050\\uD06C\\uD088\\uD0A4\\uD0C0\\uD0DC\\uD0F8\\uD114\\uD130\\uD14C\\uD168\\uD184\\uD1A0\\uD1BC\\uD1D8\\uD1F4\\uD210\\uD22C\\uD248\\uD264\\uD280\\uD29C\\uD2B8\\uD2D4\\uD2F0\\uD30C\\uD328\\uD344\\uD360\\uD37C\\uD398\\uD3B4\\uD3D0\\uD3EC\\uD408\\uD424\\uD440\\uD45C\\uD478\\uD494\\uD4B0\\uD4CC\\uD4E8\\uD504\\uD520\\uD53C\\uD558\\uD574\\uD590\\uD5AC\\uD5C8\\uD5E4\\uD600\\uD61C\\uD638\\uD654\\uD670\\uD68C\\uD6A8\\uD6C4\\uD6E0\\uD6FC\\uD718\\uD734\\uD750\\uD76C\\uD788]", + "$LVT": "[\\uAC01-\\uAC1B\\uAC1D-\\uAC37\\uAC39-\\uAC53\\uAC55-\\uAC6F\\uAC71-\\uAC8B\\uAC8D-\\uACA7\\uACA9-\\uACC3\\uACC5-\\uACDF\\uACE1-\\uACFB\\uACFD-\\uAD17\\uAD19-\\uAD33\\uAD35-\\uAD4F\\uAD51-\\uAD6B\\uAD6D-\\uAD87\\uAD89-\\uADA3\\uADA5-\\uADBF\\uADC1-\\uADDB\\uADDD-\\uADF7\\uADF9-\\uAE13\\uAE15-\\uAE2F\\uAE31-\\uAE4B\\uAE4D-\\uAE67\\uAE69-\\uAE83\\uAE85-\\uAE9F\\uAEA1-\\uAEBB\\uAEBD-\\uAED7\\uAED9-\\uAEF3\\uAEF5-\\uAF0F\\uAF11-\\uAF2B\\uAF2D-\\uAF47\\uAF49-\\uAF63\\uAF65-\\uAF7F\\uAF81-\\uAF9B\\uAF9D-\\uAFB7\\uAFB9-\\uAFD3\\uAFD5-\\uAFEF\\uAFF1-\\uB00B\\uB00D-\\uB027\\uB029-\\uB043\\uB045-\\uB05F\\uB061-\\uB07B\\uB07D-\\uB097\\uB099-\\uB0B3\\uB0B5-\\uB0CF\\uB0D1-\\uB0EB\\uB0ED-\\uB107\\uB109-\\uB123\\uB125-\\uB13F\\uB141-\\uB15B\\uB15D-\\uB177\\uB179-\\uB193\\uB195-\\uB1AF\\uB1B1-\\uB1CB\\uB1CD-\\uB1E7\\uB1E9-\\uB203\\uB205-\\uB21F\\uB221-\\uB23B\\uB23D-\\uB257\\uB259-\\uB273\\uB275-\\uB28F\\uB291-\\uB2AB\\uB2AD-\\uB2C7\\uB2C9-\\uB2E3\\uB2E5-\\uB2FF\\uB301-\\uB31B\\uB31D-\\uB337\\uB339-\\uB353\\uB355-\\uB36F\\uB371-\\uB38B\\uB38D-\\uB3A7\\uB3A9-\\uB3C3\\uB3C5-\\uB3DF\\uB3E1-\\uB3FB\\uB3FD-\\uB417\\uB419-\\uB433\\uB435-\\uB44F\\uB451-\\uB46B\\uB46D-\\uB487\\uB489-\\uB4A3\\uB4A5-\\uB4BF\\uB4C1-\\uB4DB\\uB4DD-\\uB4F7\\uB4F9-\\uB513\\uB515-\\uB52F\\uB531-\\uB54B\\uB54D-\\uB567\\uB569-\\uB583\\uB585-\\uB59F\\uB5A1-\\uB5BB\\uB5BD-\\uB5D7\\uB5D9-\\uB5F3\\uB5F5-\\uB60F\\uB611-\\uB62B\\uB62D-\\uB647\\uB649-\\uB663\\uB665-\\uB67F\\uB681-\\uB69B\\uB69D-\\uB6B7\\uB6B9-\\uB6D3\\uB6D5-\\uB6EF\\uB6F1-\\uB70B\\uB70D-\\uB727\\uB729-\\uB743\\uB745-\\uB75F\\uB761-\\uB77B\\uB77D-\\uB797\\uB799-\\uB7B3\\uB7B5-\\uB7CF\\uB7D1-\\uB7EB\\uB7ED-\\uB807\\uB809-\\uB823\\uB825-\\uB83F\\uB841-\\uB85B\\uB85D-\\uB877\\uB879-\\uB893\\uB895-\\uB8AF\\uB8B1-\\uB8CB\\uB8CD-\\uB8E7\\uB8E9-\\uB903\\uB905-\\uB91F\\uB921-\\uB93B\\uB93D-\\uB957\\uB959-\\uB973\\uB975-\\uB98F\\uB991-\\uB9AB\\uB9AD-\\uB9C7\\uB9C9-\\uB9E3\\uB9E5-\\uB9FF\\uBA01-\\uBA1B\\uBA1D-\\uBA37\\uBA39-\\uBA53\\uBA55-\\uBA6F\\uBA71-\\uBA8B\\uBA8D-\\uBAA7\\uBAA9-\\uBAC3\\uBAC5-\\uBADF\\uBAE1-\\uBAFB\\uBAFD-\\uBB17\\uBB19-\\uBB33\\uBB35-\\uBB4F\\uBB51-\\uBB6B\\uBB6D-\\uBB87\\uBB89-\\uBBA3\\uBBA5-\\uBBBF\\uBBC1-\\uBBDB\\uBBDD-\\uBBF7\\uBBF9-\\uBC13\\uBC15-\\uBC2F\\uBC31-\\uBC4B\\uBC4D-\\uBC67\\uBC69-\\uBC83\\uBC85-\\uBC9F\\uBCA1-\\uBCBB\\uBCBD-\\uBCD7\\uBCD9-\\uBCF3\\uBCF5-\\uBD0F\\uBD11-\\uBD2B\\uBD2D-\\uBD47\\uBD49-\\uBD63\\uBD65-\\uBD7F\\uBD81-\\uBD9B\\uBD9D-\\uBDB7\\uBDB9-\\uBDD3\\uBDD5-\\uBDEF\\uBDF1-\\uBE0B\\uBE0D-\\uBE27\\uBE29-\\uBE43\\uBE45-\\uBE5F\\uBE61-\\uBE7B\\uBE7D-\\uBE97\\uBE99-\\uBEB3\\uBEB5-\\uBECF\\uBED1-\\uBEEB\\uBEED-\\uBF07\\uBF09-\\uBF23\\uBF25-\\uBF3F\\uBF41-\\uBF5B\\uBF5D-\\uBF77\\uBF79-\\uBF93\\uBF95-\\uBFAF\\uBFB1-\\uBFCB\\uBFCD-\\uBFE7\\uBFE9-\\uC003\\uC005-\\uC01F\\uC021-\\uC03B\\uC03D-\\uC057\\uC059-\\uC073\\uC075-\\uC08F\\uC091-\\uC0AB\\uC0AD-\\uC0C7\\uC0C9-\\uC0E3\\uC0E5-\\uC0FF\\uC101-\\uC11B\\uC11D-\\uC137\\uC139-\\uC153\\uC155-\\uC16F\\uC171-\\uC18B\\uC18D-\\uC1A7\\uC1A9-\\uC1C3\\uC1C5-\\uC1DF\\uC1E1-\\uC1FB\\uC1FD-\\uC217\\uC219-\\uC233\\uC235-\\uC24F\\uC251-\\uC26B\\uC26D-\\uC287\\uC289-\\uC2A3\\uC2A5-\\uC2BF\\uC2C1-\\uC2DB\\uC2DD-\\uC2F7\\uC2F9-\\uC313\\uC315-\\uC32F\\uC331-\\uC34B\\uC34D-\\uC367\\uC369-\\uC383\\uC385-\\uC39F\\uC3A1-\\uC3BB\\uC3BD-\\uC3D7\\uC3D9-\\uC3F3\\uC3F5-\\uC40F\\uC411-\\uC42B\\uC42D-\\uC447\\uC449-\\uC463\\uC465-\\uC47F\\uC481-\\uC49B\\uC49D-\\uC4B7\\uC4B9-\\uC4D3\\uC4D5-\\uC4EF\\uC4F1-\\uC50B\\uC50D-\\uC527\\uC529-\\uC543\\uC545-\\uC55F\\uC561-\\uC57B\\uC57D-\\uC597\\uC599-\\uC5B3\\uC5B5-\\uC5CF\\uC5D1-\\uC5EB\\uC5ED-\\uC607\\uC609-\\uC623\\uC625-\\uC63F\\uC641-\\uC65B\\uC65D-\\uC677\\uC679-\\uC693\\uC695-\\uC6AF\\uC6B1-\\uC6CB\\uC6CD-\\uC6E7\\uC6E9-\\uC703\\uC705-\\uC71F\\uC721-\\uC73B\\uC73D-\\uC757\\uC759-\\uC773\\uC775-\\uC78F\\uC791-\\uC7AB\\uC7AD-\\uC7C7\\uC7C9-\\uC7E3\\uC7E5-\\uC7FF\\uC801-\\uC81B\\uC81D-\\uC837\\uC839-\\uC853\\uC855-\\uC86F\\uC871-\\uC88B\\uC88D-\\uC8A7\\uC8A9-\\uC8C3\\uC8C5-\\uC8DF\\uC8E1-\\uC8FB\\uC8FD-\\uC917\\uC919-\\uC933\\uC935-\\uC94F\\uC951-\\uC96B\\uC96D-\\uC987\\uC989-\\uC9A3\\uC9A5-\\uC9BF\\uC9C1-\\uC9DB\\uC9DD-\\uC9F7\\uC9F9-\\uCA13\\uCA15-\\uCA2F\\uCA31-\\uCA4B\\uCA4D-\\uCA67\\uCA69-\\uCA83\\uCA85-\\uCA9F\\uCAA1-\\uCABB\\uCABD-\\uCAD7\\uCAD9-\\uCAF3\\uCAF5-\\uCB0F\\uCB11-\\uCB2B\\uCB2D-\\uCB47\\uCB49-\\uCB63\\uCB65-\\uCB7F\\uCB81-\\uCB9B\\uCB9D-\\uCBB7\\uCBB9-\\uCBD3\\uCBD5-\\uCBEF\\uCBF1-\\uCC0B\\uCC0D-\\uCC27\\uCC29-\\uCC43\\uCC45-\\uCC5F\\uCC61-\\uCC7B\\uCC7D-\\uCC97\\uCC99-\\uCCB3\\uCCB5-\\uCCCF\\uCCD1-\\uCCEB\\uCCED-\\uCD07\\uCD09-\\uCD23\\uCD25-\\uCD3F\\uCD41-\\uCD5B\\uCD5D-\\uCD77\\uCD79-\\uCD93\\uCD95-\\uCDAF\\uCDB1-\\uCDCB\\uCDCD-\\uCDE7\\uCDE9-\\uCE03\\uCE05-\\uCE1F\\uCE21-\\uCE3B\\uCE3D-\\uCE57\\uCE59-\\uCE73\\uCE75-\\uCE8F\\uCE91-\\uCEAB\\uCEAD-\\uCEC7\\uCEC9-\\uCEE3\\uCEE5-\\uCEFF\\uCF01-\\uCF1B\\uCF1D-\\uCF37\\uCF39-\\uCF53\\uCF55-\\uCF6F\\uCF71-\\uCF8B\\uCF8D-\\uCFA7\\uCFA9-\\uCFC3\\uCFC5-\\uCFDF\\uCFE1-\\uCFFB\\uCFFD-\\uD017\\uD019-\\uD033\\uD035-\\uD04F\\uD051-\\uD06B\\uD06D-\\uD087\\uD089-\\uD0A3\\uD0A5-\\uD0BF\\uD0C1-\\uD0DB\\uD0DD-\\uD0F7\\uD0F9-\\uD113\\uD115-\\uD12F\\uD131-\\uD14B\\uD14D-\\uD167\\uD169-\\uD183\\uD185-\\uD19F\\uD1A1-\\uD1BB\\uD1BD-\\uD1D7\\uD1D9-\\uD1F3\\uD1F5-\\uD20F\\uD211-\\uD22B\\uD22D-\\uD247\\uD249-\\uD263\\uD265-\\uD27F\\uD281-\\uD29B\\uD29D-\\uD2B7\\uD2B9-\\uD2D3\\uD2D5-\\uD2EF\\uD2F1-\\uD30B\\uD30D-\\uD327\\uD329-\\uD343\\uD345-\\uD35F\\uD361-\\uD37B\\uD37D-\\uD397\\uD399-\\uD3B3\\uD3B5-\\uD3CF\\uD3D1-\\uD3EB\\uD3ED-\\uD407\\uD409-\\uD423\\uD425-\\uD43F\\uD441-\\uD45B\\uD45D-\\uD477\\uD479-\\uD493\\uD495-\\uD4AF\\uD4B1-\\uD4CB\\uD4CD-\\uD4E7\\uD4E9-\\uD503\\uD505-\\uD51F\\uD521-\\uD53B\\uD53D-\\uD557\\uD559-\\uD573\\uD575-\\uD58F\\uD591-\\uD5AB\\uD5AD-\\uD5C7\\uD5C9-\\uD5E3\\uD5E5-\\uD5FF\\uD601-\\uD61B\\uD61D-\\uD637\\uD639-\\uD653\\uD655-\\uD66F\\uD671-\\uD68B\\uD68D-\\uD6A7\\uD6A9-\\uD6C3\\uD6C5-\\uD6DF\\uD6E1-\\uD6FB\\uD6FD-\\uD717\\uD719-\\uD733\\uD735-\\uD74F\\uD751-\\uD76B\\uD76D-\\uD787\\uD789-\\uD7A3]", + "$LinkingConsonant": "[\\u0915-\\u0939\\u0958-\\u095F\\u0978-\\u097F\\u0995-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09DC\\u09DD\\u09DF\\u09F0\\u09F1\\u0A95-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0AF9\\u0B15-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B5C\\u0B5D\\u0B5F\\u0B71\\u0C15-\\u0C28\\u0C2A-\\u0C39\\u0C58-\\u0C5A\\u0D15-\\u0D3A]", + "$Prepend": "(?:[\\u0600-\\u0605\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u0D4E]|\\uD804[\\uDCBD\\uDCCD\\uDDC2\\uDDC3]|\\uD806[\\uDD3F\\uDD41\\uDE3A\\uDE84-\\uDE89]|\\uD807[\\uDD46\\uDF02])", + "$RI": "(?:\\uD83C[\\uDDE6-\\uDDFF])", + "$SpacingMark": "(?:[\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u094F\\u0982\\u0983\\u09BF\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0\\u0CC1\\u0CC3\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CF3\\u0D02\\u0D03\\u0D3F\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D82\\u0D83\\u0DD0\\u0DD1\\u0DD8-\\u0DDE\\u0DF2\\u0DF3\\u0E33\\u0EB3\\u0F3E\\u0F3F\\u0F7F\\u1031\\u103B\\u103C\\u1056\\u1057\\u1084\\u1715\\u1734\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u1A19\\u1A1A\\u1A55\\u1A57\\u1A6D-\\u1A72\\u1B04\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2\\u1BF3\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF7\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BE-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAAEB\\uAAEE\\uAAEF\\uAAF5\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]|\\uD804[\\uDC00\\uDC02\\uDC82\\uDCB0-\\uDCB2\\uDCB7\\uDCB8\\uDD2C\\uDD45\\uDD46\\uDD82\\uDDB3-\\uDDB5\\uDDBF\\uDDC0\\uDDCE\\uDE2C-\\uDE2E\\uDE32\\uDE33\\uDE35\\uDEE0-\\uDEE2\\uDF02\\uDF03\\uDF3F\\uDF41-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF62\\uDF63]|\\uD805[\\uDC35-\\uDC37\\uDC40\\uDC41\\uDC45\\uDCB1\\uDCB2\\uDCB9\\uDCBB\\uDCBC\\uDCBE\\uDCC1\\uDDB0\\uDDB1\\uDDB8-\\uDDBB\\uDDBE\\uDE30-\\uDE32\\uDE3B\\uDE3C\\uDE3E\\uDEAC\\uDEAE\\uDEAF\\uDEB6\\uDF26]|\\uD806[\\uDC2C-\\uDC2E\\uDC38\\uDD31-\\uDD35\\uDD37\\uDD38\\uDD3D\\uDD40\\uDD42\\uDDD1-\\uDDD3\\uDDDC-\\uDDDF\\uDDE4\\uDE39\\uDE57\\uDE58\\uDE97]|\\uD807[\\uDC2F\\uDC3E\\uDCA9\\uDCB1\\uDCB4\\uDD8A-\\uDD8E\\uDD93\\uDD94\\uDD96\\uDEF5\\uDEF6\\uDF03\\uDF34\\uDF35\\uDF3E\\uDF3F\\uDF41]|\\uD81B[\\uDF51-\\uDF87\\uDFF0\\uDFF1]|\\uD834[\\uDD66\\uDD6D])", + "$T": "[\\u11A8-\\u11FF\\uD7CB-\\uD7FB]", + "$V": "[\\u1160-\\u11A7\\uD7B0-\\uD7C6]", + "$Virama": "[\\u094D\\u09CD\\u0ACD\\u0B4D\\u0C4D\\u0D4D]", + "$ZWJ": "\\u200D" + } + }, + "sentence": { + "segmentRules": { + "10": { + "after": "($Sp|$ParaSep)", + "before": "$SATerm$Close*$Sp*", + "breaks": false + }, + "11": { + "before": "$SATerm$Close*$Sp*$ParaSep?", + "breaks": true + }, + "3": { + "after": "$LF", + "before": "$CR", + "breaks": false + }, + "4": { + "before": "$ParaSep", + "breaks": true + }, + "5": { + "after": "(?:$Format|$Extend)", + "breaks": false + }, + "6": { + "after": "$Numeric", + "before": "$ATerm", + "breaks": false + }, + "7": { + "after": "$Upper", + "before": "($Upper|$Lower)$ATerm", + "breaks": false + }, + "8": { + "after": "$NotPreLower_*$Lower", + "before": "$ATerm$Close*$Sp*", + "breaks": false + }, + "8.1": { + "after": "($SContinue|$SATerm)", + "before": "$SATerm$Close*$Sp*", + "breaks": false + }, + "9": { + "after": "($Close|$Sp|$ParaSep)", + "before": "$SATerm$Close*", + "breaks": false + }, + "998": { + "after": "$Any", + "breaks": false + } + }, + "suppressions": [], + "variables": { + "$ATerm": "([\\.\\u2024\\uFE52\\uFF0E](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$Any": "(?:[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])", + "$CR": "\\r", + "$Close": "((?:[\"'-\\)\\[\\]\\{\\}\\xAB\\xBB\\u0F3A-\\u0F3D\\u169B\\u169C\\u2018-\\u201F\\u2039\\u203A\\u2045\\u2046\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u275B-\\u2760\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2E00-\\u2E0D\\u2E1C\\u2E1D\\u2E20-\\u2E29\\u2E42\\u2E55-\\u2E5C\\u3008-\\u3011\\u3014-\\u301B\\u301D-\\u301F\\uFD3E\\uFD3F\\uFE17\\uFE18\\uFE35-\\uFE44\\uFE47\\uFE48\\uFE59-\\uFE5E\\uFF08\\uFF09\\uFF3B\\uFF3D\\uFF5B\\uFF5D\\uFF5F\\uFF60\\uFF62\\uFF63]|\\uD83D[\\uDE76-\\uDE78])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$Extend": "(?:[\\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\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u200D\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFF9E\\uFF9F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC20-\\uDC7F\\uDD00-\\uDDEF])", + "$FE": "(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])", + "$Format": "(?:[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40\\uDC01)", + "$LF": "\\n", + "$Lower": "((?:[a-z\\xAA\\xB5\\xBA\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02B8\\u02C0\\u02C1\\u02E0-\\u02E4\\u0371\\u0373\\u0377\\u037A-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0560-\\u0588\\u10FC\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1DBF\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u2071\\u207F\\u2090-\\u209C\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2170-\\u217F\\u2184\\u24D0-\\u24E9\\u2C30-\\u2C5F\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7D\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B-\\uA69D\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7AF\\uA7B5\\uA7B7\\uA7B9\\uA7BB\\uA7BD\\uA7BF\\uA7C1\\uA7C3\\uA7C8\\uA7CA\\uA7D1\\uA7D3\\uA7D5\\uA7D7\\uA7D9\\uA7F2-\\uA7F4\\uA7F6\\uA7F8-\\uA7FA\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A]|\\uD801[\\uDC28-\\uDC4F\\uDCD8-\\uDCFB\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDF80\\uDF83-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD803[\\uDCC0-\\uDCF2]|\\uD806[\\uDCC0-\\uDCDF]|\\uD81B[\\uDE60-\\uDE7F]|\\uD835[\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]|\\uD837[\\uDF00-\\uDF09\\uDF0B-\\uDF1E\\uDF25-\\uDF2A]|\\uD838[\\uDC30-\\uDC6D]|\\uD83A[\\uDD22-\\uDD43])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$NotPreLower_": "(?:(?![\\n\\r!\\.\\?A-Za-z\\x85\\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-\\u0589\\u05D0-\\u05EA\\u05EF-\\u05F3\\u061D-\\u064A\\u066E\\u066F\\u0671-\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF-\\u0702\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07F9\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0837\\u0839\\u083D\\u083E\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0964\\u0965\\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\\u104A\\u104B\\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\\u1362\\u1367\\u1368\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166E-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1735\\u1736\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1803\\u1809\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1944\\u1945\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7-\\u1AAB\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B5A\\u1B5B\\u1B5E\\u1B5F\\u1B7D\\u1B7E\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C3B\\u1C3C\\u1C4D-\\u1C4F\\u1C5A-\\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\\u2024\\u2028\\u2029\\u203C\\u203D\\u2047-\\u2049\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u24B6-\\u24E9\\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\\u2E2E\\u2E2F\\u2E3C\\u2E53\\u2E54\\u3002\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA4FF-\\uA60C\\uA60E-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA6F3\\uA6F7\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA876\\uA877\\uA882-\\uA8B3\\uA8CE\\uA8CF\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA92F-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9C8\\uA9C9\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA5D-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF0-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABEB\\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\\uFE52\\uFE56\\uFE57\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF01\\uFF0E\\uFF1F\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF61\\uFF66-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\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\\uDE56\\uDE57\\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\\uDF55-\\uDF59\\uDF70-\\uDF81\\uDF86-\\uDF89\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC47\\uDC48\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCBE-\\uDCC1\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD41-\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC6\\uDDCD\\uDDDA\\uDDDC\\uDDDE\\uDDDF\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE38\\uDE39\\uDE3B\\uDE3C\\uDE3F\\uDE40\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA9\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4C\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDC2\\uDDC3\\uDDC9-\\uDDDB\\uDE00-\\uDE2F\\uDE41\\uDE42\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF3C-\\uDF3E\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD44\\uDD46\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE42\\uDE43\\uDE50\\uDE5C-\\uDE89\\uDE9B-\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40-\\uDC42\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDEF7\\uDEF8\\uDF02\\uDF04-\\uDF10\\uDF12-\\uDF33\\uDF43\\uDF44\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\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\\uDE6E-\\uDEBE\\uDED0-\\uDEED\\uDEF5\\uDF00-\\uDF2F\\uDF37\\uDF38\\uDF40-\\uDF44\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDE98\\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\\uDC9F]|\\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]|\\uD836\\uDE88|\\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]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF39\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A\\uDF50-\\uDFFF]|\\uD888[\\uDC00-\\uDFAF])[\\s\\S])", + "$Numeric": "((?:[0-9\\u0660-\\u0669\\u066B\\u066C\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]|\\uD801[\\uDCA0-\\uDCA9]|\\uD803[\\uDD30-\\uDD39]|\\uD804[\\uDC66-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDEF0-\\uDEF9]|\\uD805[\\uDC50-\\uDC59\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF39]|\\uD806[\\uDCE0-\\uDCE9\\uDD50-\\uDD59]|\\uD807[\\uDC50-\\uDC59\\uDD50-\\uDD59\\uDDA0-\\uDDA9\\uDF50-\\uDF59]|\\uD81A[\\uDE60-\\uDE69\\uDEC0-\\uDEC9\\uDF50-\\uDF59]|\\uD835[\\uDFCE-\\uDFFF]|\\uD838[\\uDD40-\\uDD49\\uDEF0-\\uDEF9]|\\uD839[\\uDCF0-\\uDCF9]|\\uD83A[\\uDD50-\\uDD59]|\\uD83E[\\uDFF0-\\uDFF9])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$OLetter": "((?:[\\u01BB\\u01C0-\\u01C3\\u0294\\u02B9-\\u02BF\\u02C6-\\u02D1\\u02EC\\u02EE\\u0374\\u0559\\u05D0-\\u05EA\\u05EF-\\u05F3\\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\\u10D0-\\u10FA\\u10FD-\\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\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\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\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u2135-\\u2138\\u2180-\\u2182\\u2185-\\u2188\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA66E\\uA67F\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA788\\uA78F\\uA7F7\\uA7FB-\\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\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\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\\uFF66-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC50-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF81\\uDF82]|\\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\\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\\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[\\uDC00-\\uDC6E\\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[\\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]|\\uD837\\uDF0A|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDCD0-\\uDCEB\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\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]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A\\uDF50-\\uDFFF]|\\uD888[\\uDC00-\\uDFAF])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$ParaSep": "([\\x85\\u2028\\u2029]|\\r|\\n)", + "$SATerm": "(((?:[!\\?\\u0589\\u061D-\\u061F\\u06D4\\u0700-\\u0702\\u07F9\\u0837\\u0839\\u083D\\u083E\\u0964\\u0965\\u104A\\u104B\\u1362\\u1367\\u1368\\u166E\\u1735\\u1736\\u1803\\u1809\\u1944\\u1945\\u1AA8-\\u1AAB\\u1B5A\\u1B5B\\u1B5E\\u1B5F\\u1B7D\\u1B7E\\u1C3B\\u1C3C\\u1C7E\\u1C7F\\u203C\\u203D\\u2047-\\u2049\\u2E2E\\u2E3C\\u2E53\\u2E54\\u3002\\uA4FF\\uA60E\\uA60F\\uA6F3\\uA6F7\\uA876\\uA877\\uA8CE\\uA8CF\\uA92F\\uA9C8\\uA9C9\\uAA5D-\\uAA5F\\uAAF0\\uAAF1\\uABEB\\uFE56\\uFE57\\uFF01\\uFF1F\\uFF61]|\\uD802[\\uDE56\\uDE57]|\\uD803[\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47\\uDC48\\uDCBE-\\uDCC1\\uDD41-\\uDD43\\uDDC5\\uDDC6\\uDDCD\\uDDDE\\uDDDF\\uDE38\\uDE39\\uDE3B\\uDE3C\\uDEA9]|\\uD805[\\uDC4B\\uDC4C\\uDDC2\\uDDC3\\uDDC9-\\uDDD7\\uDE41\\uDE42\\uDF3C-\\uDF3E]|\\uD806[\\uDD44\\uDD46\\uDE42\\uDE43\\uDE9B\\uDE9C]|\\uD807[\\uDC41\\uDC42\\uDEF7\\uDEF8\\uDF43\\uDF44]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37\\uDF38\\uDF44]|\\uD81B\\uDE98|\\uD82F\\uDC9F|\\uD836\\uDE88)(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)|([\\.\\u2024\\uFE52\\uFF0E](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*))", + "$SContinue": "([,\\x2D:\\u055D\\u060C\\u060D\\u07F8\\u1802\\u1808\\u2013\\u2014\\u3001\\uFE10\\uFE11\\uFE13\\uFE31\\uFE32\\uFE50\\uFE51\\uFE55\\uFE58\\uFE63\\uFF0C\\uFF0D\\uFF1A\\uFF64](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$STerm": "((?:[!\\?\\u0589\\u061D-\\u061F\\u06D4\\u0700-\\u0702\\u07F9\\u0837\\u0839\\u083D\\u083E\\u0964\\u0965\\u104A\\u104B\\u1362\\u1367\\u1368\\u166E\\u1735\\u1736\\u1803\\u1809\\u1944\\u1945\\u1AA8-\\u1AAB\\u1B5A\\u1B5B\\u1B5E\\u1B5F\\u1B7D\\u1B7E\\u1C3B\\u1C3C\\u1C7E\\u1C7F\\u203C\\u203D\\u2047-\\u2049\\u2E2E\\u2E3C\\u2E53\\u2E54\\u3002\\uA4FF\\uA60E\\uA60F\\uA6F3\\uA6F7\\uA876\\uA877\\uA8CE\\uA8CF\\uA92F\\uA9C8\\uA9C9\\uAA5D-\\uAA5F\\uAAF0\\uAAF1\\uABEB\\uFE56\\uFE57\\uFF01\\uFF1F\\uFF61]|\\uD802[\\uDE56\\uDE57]|\\uD803[\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47\\uDC48\\uDCBE-\\uDCC1\\uDD41-\\uDD43\\uDDC5\\uDDC6\\uDDCD\\uDDDE\\uDDDF\\uDE38\\uDE39\\uDE3B\\uDE3C\\uDEA9]|\\uD805[\\uDC4B\\uDC4C\\uDDC2\\uDDC3\\uDDC9-\\uDDD7\\uDE41\\uDE42\\uDF3C-\\uDF3E]|\\uD806[\\uDD44\\uDD46\\uDE42\\uDE43\\uDE9B\\uDE9C]|\\uD807[\\uDC41\\uDC42\\uDEF7\\uDEF8\\uDF43\\uDF44]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37\\uDF38\\uDF44]|\\uD81B\\uDE98|\\uD82F\\uDC9F|\\uD836\\uDE88)(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$Sep": "[\\x85\\u2028\\u2029]", + "$Sp": "([\\t\\x0B\\f \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$Upper": "((?:[A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C5\\u01C7\\u01C8\\u01CA\\u01CB\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F2\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FB8-\\u1FBC\\u1FC8-\\u1FCC\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFC\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2160-\\u216F\\u2183\\u24B6-\\u24CF\\u2C00-\\u2C2F\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AE\\uA7B0-\\uA7B4\\uA7B6\\uA7B8\\uA7BA\\uA7BC\\uA7BE\\uA7C0\\uA7C2\\uA7C4-\\uA7C7\\uA7C9\\uA7D0\\uA7D6\\uA7D8\\uA7F5\\uFF21-\\uFF3A]|\\uD801[\\uDC00-\\uDC27\\uDCB0-\\uDCD3\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95]|\\uD803[\\uDC80-\\uDCB2]|\\uD806[\\uDCA0-\\uDCBF]|\\uD81B[\\uDE40-\\uDE5F]|\\uD835[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA]|\\uD83A[\\uDD00-\\uDD21]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)" + } + }, + "word": { + "segmentRules": { + "10": { + "after": "$AHLetter", + "before": "$Numeric", + "breaks": false + }, + "11": { + "after": "$Numeric", + "before": "$Numeric($MidNum|$MidNumLetQ)", + "breaks": false + }, + "12": { + "after": "($MidNum|$MidNumLetQ)$Numeric", + "before": "$Numeric", + "breaks": false + }, + "13": { + "after": "$Katakana", + "before": "$Katakana", + "breaks": false + }, + "13.1": { + "after": "$ExtendNumLet", + "before": "($AHLetter|$Numeric|$Katakana|$ExtendNumLet)", + "breaks": false + }, + "13.2": { + "after": "($AHLetter|$Numeric|$Katakana)", + "before": "$ExtendNumLet", + "breaks": false + }, + "15": { + "after": "$RI", + "before": "^($RI$RI)*$RI", + "breaks": false + }, + "16": { + "after": "$RI", + "before": "[^\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB\\uDDFD\\uDEE0\\uDF76-\\uDF7A\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42\\uDC30-\\uDC40\\uDC47-\\uDC55\\uDEF0-\\uDEF4\\uDF30-\\uDF36\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1\\uDC9D\\uDC9E\\uDCA0-\\uDCA3\\uDF00-\\uDF2D\\uDF30-\\uDF46\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF\\uDCEC-\\uDCEF\\uDCD0-\\uDCD6\\uDD44-\\uDD4A\\uDDE6-\\uDDFF\\uDFFB-\\uDFFF\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF]($RI$RI)*$RI", + "breaks": false + }, + "3": { + "after": "$LF", + "before": "$CR", + "breaks": false + }, + "3.1": { + "before": "($Newline|$CR|$LF)", + "breaks": true + }, + "3.2": { + "after": "($Newline|$CR|$LF)", + "breaks": true + }, + "3.3": { + "after": "$ExtPict", + "before": "$ZWJ", + "breaks": false + }, + "3.4": { + "after": "$WSegSpace", + "before": "$WSegSpace", + "breaks": false + }, + "4": { + "after": "(?:$Format|$Extend|$ZWJ)", + "before": "$NotBreak_", + "breaks": false + }, + "5": { + "after": "$AHLetter", + "before": "$AHLetter", + "breaks": false + }, + "6": { + "after": "($MidLetter|$MidNumLetQ)$AHLetter", + "before": "$AHLetter", + "breaks": false + }, + "7": { + "after": "$AHLetter", + "before": "$AHLetter($MidLetter|$MidNumLetQ)", + "breaks": false + }, + "7.1": { + "after": "$Single_Quote", + "before": "$Hebrew_Letter", + "breaks": false + }, + "7.2": { + "after": "$Double_Quote$Hebrew_Letter", + "before": "$Hebrew_Letter", + "breaks": false + }, + "7.3": { + "after": "$Hebrew_Letter", + "before": "$Hebrew_Letter$Double_Quote", + "breaks": false + }, + "8": { + "after": "$Numeric", + "before": "$Numeric", + "breaks": false + }, + "9": { + "after": "$Numeric", + "before": "$AHLetter", + "breaks": false + } + }, + "suppressions": [], + "variables": { + "$AHLetter": "(((?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02D7\\u02DE-\\u02FF\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559-\\u055C\\u055E\\u0560-\\u0588\\u058A\\u05F3\\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\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1A00-\\u1A16\\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\\u2160-\\u2188\\u24B6-\\u24E9\\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\\u303B\\u303C\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA708-\\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\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB50-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\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]|\\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[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|\\uD80C[\\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]|\\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]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89])|[\\u05D0-\\u05EA\\u05EF-\\u05F2\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFB4F])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$ALetter": "((?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02D7\\u02DE-\\u02FF\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559-\\u055C\\u055E\\u0560-\\u0588\\u058A\\u05F3\\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\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1A00-\\u1A16\\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\\u2160-\\u2188\\u24B6-\\u24E9\\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\\u303B\\u303C\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA708-\\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\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB50-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\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]|\\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[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|\\uD80C[\\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]|\\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]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$CR": "\\r", + "$Double_Quote": "(\"(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$ExtPict": "(?:[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u2388\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2605\\u2607-\\u2612\\u2614-\\u2685\\u2690-\\u2705\\u2708-\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2767\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC00-\\uDCFF\\uDD0D-\\uDD0F\\uDD2F\\uDD6C-\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDAD-\\uDDE5\\uDE01-\\uDE0F\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE3C-\\uDE3F\\uDE49-\\uDFFA]|\\uD83D[\\uDC00-\\uDD3D\\uDD46-\\uDE4F\\uDE80-\\uDEFF\\uDF74-\\uDF7F\\uDFD5-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE-\\uDCFF\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDEFF]|\\uD83F[\\uDC00-\\uDFFD])", + "$Extend": "(?:[\\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\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFF9E\\uFF9F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC20-\\uDC7F\\uDD00-\\uDDEF])", + "$ExtendNumLet": "([_\\u202F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$FE": "(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])", + "$Format": "(?:[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40\\uDC01)", + "$Hebrew_Letter": "([\\u05D0-\\u05EA\\u05EF-\\u05F2\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFB4F](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$Katakana": "((?:[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30FA\\u30FC-\\u30FF\\u31F0-\\u31FF\\u32D0-\\u32FE\\u3300-\\u3357\\uFF66-\\uFF9D]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00\\uDD20-\\uDD22\\uDD55\\uDD64-\\uDD67])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$LF": "\\n", + "$MidLetter": "([\\xB7\\u0387\\u055F\\u05F4\\u2027\\uFE13](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$MidNum": "([,;\\u037E\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$MidNumLet": "([\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$MidNumLetQ": "(([\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]|')(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$Newline": "[\\x0B\\f\\x85\\u2028\\u2029]", + "$NotBreak_": "(?:(?![\\n-\\r\\x85\\u2028\\u2029])[\\s\\S])", + "$Numeric": "((?:[0-9\\u0660-\\u0669\\u066B\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]|\\uD801[\\uDCA0-\\uDCA9]|\\uD803[\\uDD30-\\uDD39]|\\uD804[\\uDC66-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDEF0-\\uDEF9]|\\uD805[\\uDC50-\\uDC59\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF39]|\\uD806[\\uDCE0-\\uDCE9\\uDD50-\\uDD59]|\\uD807[\\uDC50-\\uDC59\\uDD50-\\uDD59\\uDDA0-\\uDDA9\\uDF50-\\uDF59]|\\uD81A[\\uDE60-\\uDE69\\uDEC0-\\uDEC9\\uDF50-\\uDF59]|\\uD835[\\uDFCE-\\uDFFF]|\\uD838[\\uDD40-\\uDD49\\uDEF0-\\uDEF9]|\\uD839[\\uDCF0-\\uDCF9]|\\uD83A[\\uDD50-\\uDD59]|\\uD83E[\\uDFF0-\\uDFF9])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$RI": "((?:\\uD83C[\\uDDE6-\\uDDFF])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$Single_Quote": "('(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)", + "$WSegSpace": "[ \\u1680\\u2000-\\u2006\\u2008-\\u200A\\u205F\\u3000]", + "$ZWJ": "\\u200D" + } + } + }, + "ru": { + "sentence": { + "segmentRules": {}, + "suppressions": [ + "руб.", + "янв.", + "до н. э.", + "сент.", + "тел.", + "дек.", + "февр.", + "нояб.", + "апр.", + "н. э.", + "окт.", + "тыс.", + "авг.", + "проф.", + "н.э.", + "кв.", + "ул.", + "отд." + ], + "variables": {} + } + }, + "zh": {} +}; + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-segmenter/src/segmentation-utils.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@formatjs/intl-segmenter/src/segmentation-utils.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isSurrogate = exports.replaceVariables = void 0; +var replaceVariables = function (variables, input) { + var findVarRegex = /\$[A-Za-z0-9_]+/gm; + return input.replaceAll(findVarRegex, function (match) { + if (!(match in variables)) { + throw new Error("No such variable ".concat(match)); + } + return variables[match]; + }); +}; +exports.replaceVariables = replaceVariables; +var isSurrogate = function (str, pos) { + return (0xd800 <= str.charCodeAt(pos - 1) && + str.charCodeAt(pos - 1) <= 0xdbff && + 0xdc00 <= str.charCodeAt(pos) && + str.charCodeAt(pos) <= 0xdfff); +}; +exports.isSurrogate = isSurrogate; +// alternative surrogate check mimicking the java implementation +// const TRAIL_SURROGATE_BITMASK = 0xfffffc00 +// const TRAIL_SURROGATE_BITS = 0xdc00 +// const LEAD_SURROGATE_BITMASK = 0xfffffc00 +// const LEAD_SURROGATE_BITS = 0xd800 +// const isSurrogate = (text: string, position: number) => { +// if ( +// (text.charCodeAt(position - 1) & LEAD_SURROGATE_BITMASK) == +// LEAD_SURROGATE_BITS && +// (text.charCodeAt(position) & TRAIL_SURROGATE_BITMASK) == +// TRAIL_SURROGATE_BITS +// ) { +// return true +// } else { +// return false +// } +// } + + +/***/ }), + +/***/ "./node_modules/@formatjs/intl-segmenter/src/segmenter.js": +/*!****************************************************************!*\ + !*** ./node_modules/@formatjs/intl-segmenter/src/segmenter.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Segmenter = void 0; +var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +var cldr_segmentation_rules_generated_1 = __webpack_require__(/*! ./cldr-segmentation-rules.generated */ "./node_modules/@formatjs/intl-segmenter/src/cldr-segmentation-rules.generated.js"); +var segmentation_utils_1 = __webpack_require__(/*! ./segmentation-utils */ "./node_modules/@formatjs/intl-segmenter/src/segmentation-utils.js"); +var ecma402_abstract_1 = __webpack_require__(/*! @formatjs/ecma402-abstract */ "./node_modules/@formatjs/ecma402-abstract/lib/index.js"); +var intl_localematcher_1 = __webpack_require__(/*! @formatjs/intl-localematcher */ "./node_modules/@formatjs/intl-localematcher/lib/index.js"); +/** + * Adds $ to before rules and ^ to after rules for strickness + * Replaces variables + * Initializes the RegExp + * + * @param rule raw rule string from cldr-segmentation-rules.generated + * @param variables + * @param after appends ^ if true and $ if false + * @returns + */ +var generateRuleRegex = function (rule, variables, after) { + return new RegExp("".concat(after ? '^' : '').concat((0, segmentation_utils_1.replaceVariables)(variables, rule)).concat(after ? '' : '$')); +}; +var prepareLocaleSegmentationRules = function (segmentationTypeValue) { + var preparedRules = {}; + for (var _i = 0, _a = Object.keys(segmentationTypeValue.segmentRules); _i < _a.length; _i++) { + var ruleNr = _a[_i]; + var ruleValue = segmentationTypeValue.segmentRules[ruleNr]; + var preparedRule = { + breaks: ruleValue.breaks, + }; + if ('before' in ruleValue && ruleValue.before) { + preparedRule.before = generateRuleRegex(ruleValue.before, segmentationTypeValue.variables, false); + } + if ('after' in ruleValue && ruleValue.after) { + preparedRule.after = generateRuleRegex(ruleValue.after, segmentationTypeValue.variables, true); + } + preparedRules[ruleNr] = preparedRule; + } + return preparedRules; +}; +var breaksAtResult = function (breaks, matchingRule) { return ({ + breaks: breaks, + matchingRule: matchingRule, +}); }; +var Segmenter = /** @class */ (function () { + function Segmenter(locales, options) { + var _newTarget = this.constructor; + if (_newTarget === undefined) { + throw TypeError("Constructor Intl.Segmenter requires 'new'"); + } + var requestedLocales = (0, ecma402_abstract_1.CanonicalizeLocaleList)(locales); + options = (0, ecma402_abstract_1.GetOptionsObject)(options); + var opt = Object.create(null); + var matcher = (0, ecma402_abstract_1.GetOption)(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit'); + opt.localeMatcher = matcher; + var granularity = (0, ecma402_abstract_1.GetOption)(options, 'granularity', 'string', ['word', 'sentence', 'grapheme'], 'grapheme'); + setSlot(this, 'granularity', granularity); + //TODO: figure out correct availible locales + var r = (0, intl_localematcher_1.ResolveLocale)(Segmenter.availableLocales, //availible locales + requestedLocales, opt, [], // there is no relevantExtensionKeys + {}, function () { return ''; } //use only root rules + ); + setSlot(this, 'locale', r.locale); + //root rules based on granularity + this.mergedSegmentationTypeValue = cldr_segmentation_rules_generated_1.SegmentationRules.root[granularity]; + //merge root rules with locale ones if locale is specified + if (r.locale.length) { + var localeOverrides = cldr_segmentation_rules_generated_1.SegmentationRules[r.locale]; + if (granularity in localeOverrides) { + var localeSegmentationTypeValue = localeOverrides[granularity]; + this.mergedSegmentationTypeValue.variables = tslib_1.__assign(tslib_1.__assign({}, this.mergedSegmentationTypeValue.variables), localeSegmentationTypeValue.variables); + this.mergedSegmentationTypeValue.segmentRules = tslib_1.__assign(tslib_1.__assign({}, this.mergedSegmentationTypeValue.segmentRules), localeSegmentationTypeValue.segmentRules); + this.mergedSegmentationTypeValue.suppressions = tslib_1.__spreadArray(tslib_1.__spreadArray([], this.mergedSegmentationTypeValue.suppressions, true), localeSegmentationTypeValue.suppressions, true); + } + } + //prepare rules + this.rules = prepareLocaleSegmentationRules(this.mergedSegmentationTypeValue); + //order rule keys + this.ruleSortedKeys = Object.keys(this.rules).sort(function (a, b) { return Number(a) - Number(b); }); + } + Segmenter.prototype.breaksAt = function (position, input) { + var ruleSortedKeys = this.ruleSortedKeys; + var rules = this.rules; + var mergedSegmentationTypeValue = this.mergedSegmentationTypeValue; + //artificial rule 0.2 + if (position === 0) { + return breaksAtResult(true, '0.2'); + } + if (position === input.length) { + //rule 0.3 + return breaksAtResult(true, '0.3'); + } + //artificial rule 0.1: js specific, due to es5 regex not being unicode aware + //number 0.1 chosen to mimic java implementation, but needs to execute after 0.2 and 0.3 to be inside the string bounds + if ((0, segmentation_utils_1.isSurrogate)(input, position)) { + return breaksAtResult(false, '0.1'); + } + var stringBeforeBreak = input.substring(0, position); + var stringAfterBreak = input.substring(position); + //artificial rule 0.4: handle suppressions + if ('suppressions' in mergedSegmentationTypeValue) { + for (var _i = 0, _a = mergedSegmentationTypeValue.suppressions; _i < _a.length; _i++) { + var suppressions = _a[_i]; + if (stringBeforeBreak.trim().endsWith(suppressions)) { + return breaksAtResult(false, '0.4'); + } + } + } + // loop through rules and find a match + for (var _b = 0, ruleSortedKeys_1 = ruleSortedKeys; _b < ruleSortedKeys_1.length; _b++) { + var ruleKey = ruleSortedKeys_1[_b]; + var _c = rules[ruleKey], before = _c.before, after = _c.after, breaks = _c.breaks; + // for debugging + // if (ruleKey === '16' && position === 4) { + // console.log({before, after, stringBeforeBreak, stringAfterBreak}) + // } + if (before) { + if (!before.test(stringBeforeBreak)) { + //didn't match the before part, therfore skipping + continue; + } + } + if (after) { + if (!after.test(stringAfterBreak)) { + //didn't match the after part, therfore skipping + continue; + } + } + return breaksAtResult(breaks, ruleKey); + } + //artificial rule 999: if no rule matched is Any ÷ Any so return true + return breaksAtResult(true, '999'); + }; + Segmenter.prototype.segment = function (input) { + checkReceiver(this, 'segment'); + return new SegmentIterator(this, input); + }; + Segmenter.prototype.resolvedOptions = function () { + checkReceiver(this, 'resolvedOptions'); + return tslib_1.__assign({}, (0, ecma402_abstract_1.getMultiInternalSlots)(__INTERNAL_SLOT_MAP__, this, 'locale', 'granularity')); + }; + Segmenter.supportedLocalesOf = function (locales, options) { + return (0, ecma402_abstract_1.SupportedLocales)(Segmenter.availableLocales, (0, ecma402_abstract_1.CanonicalizeLocaleList)(locales), options); + }; + Segmenter.availableLocales = new Set(Object.keys(cldr_segmentation_rules_generated_1.SegmentationRules).filter(function (key) { return key !== 'root'; })); + Segmenter.polyfilled = true; + return Segmenter; +}()); +exports.Segmenter = Segmenter; +var createSegmentDataObject = function (segmenter, segment, index, input, matchingRule) { + var returnValue = { + segment: segment, + index: index, + input: input, + }; + if (getSlot(segmenter, 'granularity') === 'word') { + returnValue.isWordLike = matchingRule !== '3.1' && matchingRule !== '3.2'; + } + return returnValue; +}; +var SegmentIterator = /** @class */ (function () { + function SegmentIterator(segmenter, input) { + this.segmenter = segmenter; + this.lastSegmentIndex = 0; + if (typeof input == 'symbol') { + throw TypeError("Input must not be a symbol"); + } + this.input = String(input); + } + SegmentIterator.prototype[Symbol.iterator] = function () { + return new SegmentIterator(this.segmenter, this.input); + }; + SegmentIterator.prototype.next = function () { + //using only the relevant bit of the string + var checkString = this.input.substring(this.lastSegmentIndex); + //loop from the start of the checkString, until exactly length (breaksAt returns break at pos=== lenght) + for (var position = 1; position <= checkString.length; position++) { + var _a = this.segmenter.breaksAt(position, checkString), breaks = _a.breaks, matchingRule = _a.matchingRule; + if (breaks) { + var segment = checkString.substring(0, position); + var index = this.lastSegmentIndex; + this.lastSegmentIndex += position; + return { + done: false, + value: createSegmentDataObject(this.segmenter, segment, index, this.input, matchingRule), + }; + } + } + //no segment was found by the loop, therefore the segmentation is done + return { done: true, value: undefined }; + }; + SegmentIterator.prototype.containing = function (positionInput) { + if (typeof positionInput === 'bigint') { + throw TypeError('Index must not be a BigInt'); + } + var position = Number(positionInput); + //https://tc39.es/ecma262/#sec-tointegerorinfinity + // 2. If number is NaN, +0𝔽, or -0𝔽, return 0. + if (isNaN(position) || !position) { + position = 0; + } + // 5. Let integer be floor(abs(ℝ(number))). + // 6. If number < -0𝔽, set integer to -integer. + position = Math.floor(Math.abs(position)) * (position < 0 ? -1 : 1); + if (position < 0 || position >= this.input.length) { + return undefined; + } + //find previous break point + var previousBreakPoint = 0; + if (position === 0) { + previousBreakPoint = 0; + } + else { + var checkString_1 = this.input; + for (var cursor = position; cursor >= 0; cursor--) { + var breaks = this.segmenter.breaksAt(cursor, checkString_1).breaks; + if (breaks) { + previousBreakPoint = cursor; + break; + } + } + } + var checkString = this.input.substring(previousBreakPoint); + //find next break point + for (var cursor = 1; cursor <= checkString.length; cursor++) { + var _a = this.segmenter.breaksAt(cursor, checkString), breaks = _a.breaks, matchingRule = _a.matchingRule; + if (breaks) { + var segment = checkString.substring(0, cursor); + return createSegmentDataObject(this.segmenter, segment, previousBreakPoint, this.input, matchingRule); + } + } + }; + return SegmentIterator; +}()); +var __INTERNAL_SLOT_MAP__ = new WeakMap(); +function getSlot(instance, key) { + return (0, ecma402_abstract_1.getInternalSlot)(__INTERNAL_SLOT_MAP__, instance, key); +} +function setSlot(instance, key, value) { + (0, ecma402_abstract_1.setInternalSlot)(__INTERNAL_SLOT_MAP__, instance, key, value); +} +function checkReceiver(receiver, methodName) { + if (!(receiver instanceof Segmenter)) { + throw TypeError("Method Intl.Segmenter.prototype.".concat(methodName, " called on incompatible receiver")); + } +} +try { + // IE11 does not have Symbol + if (typeof Symbol !== 'undefined') { + Object.defineProperty(Segmenter.prototype, Symbol.toStringTag, { + value: 'Intl.Segmenter', + writable: false, + enumerable: false, + configurable: true, + }); + } + //github.com/tc39/test262/blob/main/test/intl402/Segmenter/constructor/length.js + https: Object.defineProperty(Segmenter.prototype.constructor, 'length', { + value: 0, + writable: false, + enumerable: false, + configurable: true, + }); + // https://github.com/tc39/test262/blob/main/test/intl402/Segmenter/constructor/supportedLocalesOf/length.js + Object.defineProperty(Segmenter.supportedLocalesOf, 'length', { + value: 1, + writable: false, + enumerable: false, + configurable: true, + }); +} +catch (e) { + // Meta fix so we're test262-compliant, not important +} + + +/***/ }), + /***/ "./src/access-mode.js": /*!****************************!*\ !*** ./src/access-mode.js ***! @@ -1280,6 +10934,7 @@ const MAX_PREVIEW_DATA_SIZE = 64; const JSON_MIME_TYPE = 'application/json'; const DRAFTY_MIME_TYPE = 'text/x-drafty'; const ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview', 'ref', 'size', 'state', 'url', 'val', 'width']; +const segmenter = new Intl.Segmenter(); const INLINE_STYLES = [{ name: 'ST', start: /(?:^|[\W_])(\*)[^\s*]/, @@ -1700,24 +11355,48 @@ Drafty.parse = function (content) { if (blx.length > 0) { result.txt = blx[0].txt; result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []); + if (result.fmt.length) { + const segments = segmenter.segment(result.txt); + for (const ele of result.fmt) { + ({ + at: ele.at, + len: ele.len + } = getCorrectLengthsWhenTreatedAsGrapheme(ele, segments, result.txt)); + } + } for (let i = 1; i < blx.length; i++) { const block = blx[i]; - const offset = result.txt.length + 1; + const offset = getGraphemesFromString(result.txt).length + 1; result.fmt.push({ tp: 'BR', len: 1, at: offset - 1 }); + let segments = {}; result.txt += ' ' + block.txt; if (block.fmt) { + segments = segmenter.segment(block.txt); result.fmt = result.fmt.concat(block.fmt.map(s => { - s.at += offset; + const { + at: correctAt, + len: correctLen + } = getCorrectLengthsWhenTreatedAsGrapheme(s, segments, block.txt); + s.at = correctAt + offset; + s.len = correctLen; return s; })); } if (block.ent) { + if (isEmptyObject(segments)) { + segments = segmenter.segment(block.txt); + } result.fmt = result.fmt.concat(block.ent.map(s => { - s.at += offset; + const { + at: correctAt, + len: correctLen + } = getCorrectLengthsWhenTreatedAsGrapheme(s, segments, block.txt); + s.at = correctAt + offset; + s.len = correctLen; return s; })); } @@ -1739,7 +11418,7 @@ Drafty.append = function (first, second) { return first; } first.txt = first.txt || ''; - const len = first.txt.length; + const len = getGraphemesFromString(first.txt).length; if (typeof second == 'string') { first.txt += second; } else if (second.txt) { @@ -1927,7 +11606,7 @@ Drafty.quote = function (header, uid, body) { const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body); quote.fmt.push({ at: 0, - len: quote.txt.length, + len: getGraphemesFromString(quote.txt).length, tp: 'QQ' }); return quote; @@ -1937,7 +11616,7 @@ Drafty.mention = function (name, uid) { txt: name || '', fmt: [{ at: 0, - len: (name || '').length, + len: getGraphemesFromString(name || '').length, key: 0 }], ent: [{ @@ -2101,7 +11780,7 @@ Drafty.appendLineBreak = function (content) { }; content.fmt = content.fmt || []; content.fmt.push({ - at: content.txt.length, + at: getGraphemesFromString(content.txt).length, len: 1, tp: 'BR' }); @@ -2504,7 +12183,7 @@ function draftyToTree(doc) { key: key }); return; - } else if (at + len > txt.length) { + } else if (at + len > getGraphemesFromString(txt).length) { return; } if (!span.tp) { @@ -2546,7 +12225,8 @@ function draftyToTree(doc) { span.type = 'HD'; } }); - let tree = spansToTree({}, txt, 0, txt.length, spans); + const graphemes = getGraphemesFromString(txt); + let tree = spansToTree({}, graphemes, 0, graphemes.length, spans); const flatten = function (node) { if (Array.isArray(node.children) && node.children.length == 1) { const child = node.children[0]; @@ -2582,11 +12262,11 @@ function addNode(parent, n) { parent.children.push(n); return parent; } -function spansToTree(parent, text, start, end, spans) { +function spansToTree(parent, graphemes, start, end, spans) { if (!spans || spans.length == 0) { if (start < end) { addNode(parent, { - text: text.substring(start, end) + text: graphemes.slice(start, end).map(segment => segment.segment).join('') }); } return parent; @@ -2604,7 +12284,7 @@ function spansToTree(parent, text, start, end, spans) { } if (start < span.start) { addNode(parent, { - text: text.substring(start, span.start) + text: graphemes.slice(start, span.start).map(segment => segment.segment).join('') }); start = span.start; } @@ -2629,12 +12309,12 @@ function spansToTree(parent, text, start, end, spans) { type: span.type, data: span.data, key: span.key - }, text, start, span.end, subspans)); + }, graphemes, start, span.end, subspans)); start = span.end; } if (start < end) { addNode(parent, { - text: text.substring(start, end) + text: graphemes.slice(start, end).map(segment => segment.segment).join('') }); } return parent; @@ -2644,7 +12324,7 @@ function treeToDrafty(doc, tree, keymap) { return doc; } doc.txt = doc.txt || ''; - const start = doc.txt.length; + const start = getGraphemesFromString(doc.txt).length; if (tree.text) { doc.txt += tree.text; } else if (Array.isArray(tree.children)) { @@ -2653,7 +12333,7 @@ function treeToDrafty(doc, tree, keymap) { }); } if (tree.type) { - const len = doc.txt.length - start; + const len = getGraphemesFromString(doc.txt).length - start; doc.fmt = doc.fmt || []; if (Object.keys(tree.data || {}).length > 0) { doc.ent = doc.ent || []; @@ -2755,12 +12435,12 @@ function shortenTree(tree, limit, tail) { node.text = tail; limit = -1; } else if (node.text) { - const len = node.text.length; - if (len > limit) { - node.text = node.text.substring(0, limit) + tail; + const graphemes = getGraphemesFromString(node.text); + if (graphemes.length > limit) { + node.text = graphemes.slice(0, limit).map(segment => segment.segment).join('') + tail; limit = -1; } else { - limit -= len; + limit -= graphemes.length; } } return node; @@ -2907,6 +12587,38 @@ function copyEntData(data, light, allow) { } return null; } +function isEmptyObject(obj) { + return Object.keys(obj ?? {}).length == 0; +} +; +function getGraphemeIndices(graphemes) { + const result = []; + let graphemeIndex = 0; + let charIndex = 0; + for (const { + segment + } of graphemes) { + for (let i = 0; i < segment.length; i++) { + result[charIndex + i] = graphemeIndex; + } + charIndex += segment.length; + graphemeIndex++; + } + return result; +} +function getCorrectLengthsWhenTreatedAsGrapheme(fmt, segments, txt) { + segments = segments ?? segmenter.segment(txt); + const indices = getGraphemeIndices(segments); + const correctAt = indices[fmt.at]; + const correctLen = fmt.at + fmt.len <= txt.length ? indices[fmt.at + fmt.len - 1] - correctAt : fmt.len; + return { + at: correctAt, + len: correctLen + 1 + }; +} +function getGraphemesFromString(input) { + return Array.from(segmenter.segment(input)); +} if (true) { module.exports = Drafty; } @@ -4859,6 +14571,421 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ }); const PACKAGE_VERSION = "0.22.12"; +/***/ }), + +/***/ "./node_modules/tslib/tslib.es6.mjs": +/*!******************************************!*\ + !*** ./node_modules/tslib/tslib.es6.mjs ***! + \******************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ __addDisposableResource: () => (/* binding */ __addDisposableResource), +/* harmony export */ __assign: () => (/* binding */ __assign), +/* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator), +/* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator), +/* harmony export */ __asyncValues: () => (/* binding */ __asyncValues), +/* harmony export */ __await: () => (/* binding */ __await), +/* harmony export */ __awaiter: () => (/* binding */ __awaiter), +/* harmony export */ __classPrivateFieldGet: () => (/* binding */ __classPrivateFieldGet), +/* harmony export */ __classPrivateFieldIn: () => (/* binding */ __classPrivateFieldIn), +/* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet), +/* harmony export */ __createBinding: () => (/* binding */ __createBinding), +/* harmony export */ __decorate: () => (/* binding */ __decorate), +/* harmony export */ __disposeResources: () => (/* binding */ __disposeResources), +/* harmony export */ __esDecorate: () => (/* binding */ __esDecorate), +/* harmony export */ __exportStar: () => (/* binding */ __exportStar), +/* harmony export */ __extends: () => (/* binding */ __extends), +/* harmony export */ __generator: () => (/* binding */ __generator), +/* harmony export */ __importDefault: () => (/* binding */ __importDefault), +/* harmony export */ __importStar: () => (/* binding */ __importStar), +/* harmony export */ __makeTemplateObject: () => (/* binding */ __makeTemplateObject), +/* harmony export */ __metadata: () => (/* binding */ __metadata), +/* harmony export */ __param: () => (/* binding */ __param), +/* harmony export */ __propKey: () => (/* binding */ __propKey), +/* harmony export */ __read: () => (/* binding */ __read), +/* harmony export */ __rest: () => (/* binding */ __rest), +/* harmony export */ __runInitializers: () => (/* binding */ __runInitializers), +/* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName), +/* harmony export */ __spread: () => (/* binding */ __spread), +/* harmony export */ __spreadArray: () => (/* binding */ __spreadArray), +/* harmony export */ __spreadArrays: () => (/* binding */ __spreadArrays), +/* harmony export */ __values: () => (/* binding */ __values), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + } + return __assign.apply(this, arguments); +} + +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} + +function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +} + +function __param(paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +} + +function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { + function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } + var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; + var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; + var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); + var _, done = false; + for (var i = decorators.length - 1; i >= 0; i--) { + var context = {}; + for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; + for (var p in contextIn.access) context.access[p] = contextIn.access[p]; + context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; + var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); + if (kind === "accessor") { + if (result === void 0) continue; + if (result === null || typeof result !== "object") throw new TypeError("Object expected"); + if (_ = accept(result.get)) descriptor.get = _; + if (_ = accept(result.set)) descriptor.set = _; + if (_ = accept(result.init)) initializers.unshift(_); + } + else if (_ = accept(result)) { + if (kind === "field") initializers.unshift(_); + else descriptor[key] = _; + } + } + if (target) Object.defineProperty(target, contextIn.name, descriptor); + done = true; +}; + +function __runInitializers(thisArg, initializers, value) { + var useValue = arguments.length > 2; + for (var i = 0; i < initializers.length; i++) { + value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); + } + return useValue ? value : void 0; +}; + +function __propKey(x) { + return typeof x === "symbol" ? x : "".concat(x); +}; + +function __setFunctionName(f, name, prefix) { + if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; + return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); +}; + +function __metadata(metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var __createBinding = Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); + +function __exportStar(m, o) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); +} + +function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +} + +function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + +/** @deprecated */ +function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; +} + +/** @deprecated */ +function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +} + +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +} + +function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +} + +function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +} + +function __asyncDelegator(o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } +} + +function __asyncValues(o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +} + +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +}; + +var __setModuleDefault = Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}; + +function __importStar(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +} + +function __importDefault(mod) { + return (mod && mod.__esModule) ? mod : { default: mod }; +} + +function __classPrivateFieldGet(receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +} + +function __classPrivateFieldSet(receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +} + +function __classPrivateFieldIn(state, receiver) { + if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); + return typeof state === "function" ? receiver === state : state.has(receiver); +} + +function __addDisposableResource(env, value, async) { + if (value !== null && value !== void 0) { + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); + var dispose; + if (async) { + if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); + dispose = value[Symbol.asyncDispose]; + } + if (dispose === void 0) { + if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); + dispose = value[Symbol.dispose]; + } + if (typeof dispose !== "function") throw new TypeError("Object not disposable."); + env.stack.push({ value: value, dispose: dispose, async: async }); + } + else if (async) { + env.stack.push({ async: true }); + } + return value; +} + +var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +function __disposeResources(env) { + function fail(e) { + env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; + env.hasError = true; + } + function next() { + while (env.stack.length) { + var rec = env.stack.pop(); + try { + var result = rec.dispose && rec.dispose.call(rec.value); + if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + } + catch (e) { + fail(e); + } + } + if (env.hasError) throw env.error; + } + return next(); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + __extends, + __assign, + __rest, + __decorate, + __param, + __metadata, + __awaiter, + __generator, + __createBinding, + __exportStar, + __values, + __read, + __spread, + __spreadArrays, + __spreadArray, + __await, + __asyncGenerator, + __asyncDelegator, + __asyncValues, + __makeTemplateObject, + __importStar, + __importDefault, + __classPrivateFieldGet, + __classPrivateFieldSet, + __classPrivateFieldIn, + __addDisposableResource, + __disposeResources, +}); + + /***/ }) /******/ }); @@ -4950,7 +15077,7 @@ var __webpack_exports__ = {}; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AccessMode: () => (/* reexport safe */ _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ Drafty: () => (/* reexport default from dynamic */ _drafty_js__WEBPACK_IMPORTED_MODULE_5___default.a), +/* harmony export */ Drafty: () => (/* reexport default from dynamic */ _drafty_js__WEBPACK_IMPORTED_MODULE_6___default.a), /* harmony export */ Tinode: () => (/* binding */ Tinode) /* harmony export */ }); /* harmony import */ var _access_mode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./access-mode.js */ "./src/access-mode.js"); @@ -4958,12 +15085,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _comm_error_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./comm-error.js */ "./src/comm-error.js"); /* harmony import */ var _connection_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./connection.js */ "./src/connection.js"); /* harmony import */ var _db_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./db.js */ "./src/db.js"); -/* harmony import */ var _drafty_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./drafty.js */ "./src/drafty.js"); -/* harmony import */ var _drafty_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_drafty_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _large_file_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./large-file.js */ "./src/large-file.js"); -/* harmony import */ var _meta_builder_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./meta-builder.js */ "./src/meta-builder.js"); -/* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./topic.js */ "./src/topic.js"); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js"); +/* harmony import */ var _formatjs_intl_segmenter_polyfill__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @formatjs/intl-segmenter/polyfill */ "./node_modules/@formatjs/intl-segmenter/polyfill.js"); +/* harmony import */ var _drafty_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./drafty.js */ "./src/drafty.js"); +/* harmony import */ var _drafty_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_drafty_js__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _large_file_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./large-file.js */ "./src/large-file.js"); +/* harmony import */ var _meta_builder_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./meta-builder.js */ "./src/meta-builder.js"); +/* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./topic.js */ "./src/topic.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js"); /** * @module tinode-sdk * @@ -5020,6 +15148,7 @@ __webpack_require__.r(__webpack_exports__); + let WebSocketProvider; if (typeof WebSocket != 'undefined') { WebSocketProvider = WebSocket; @@ -5078,7 +15207,7 @@ function initForNonBrowserApp() { }; } _connection_js__WEBPACK_IMPORTED_MODULE_3__["default"].setNetworkProviders(WebSocketProvider, XHRProvider); - _large_file_js__WEBPACK_IMPORTED_MODULE_6__["default"].setNetworkProvider(XHRProvider); + _large_file_js__WEBPACK_IMPORTED_MODULE_7__["default"].setNetworkProvider(XHRProvider); _db_js__WEBPACK_IMPORTED_MODULE_4__["default"].setDatabaseProvider(IndexedDBProvider); } function detectTransport() { @@ -5098,7 +15227,7 @@ function b64EncodeUnicode(str) { } function jsonBuildHelper(key, val) { if (val instanceof Date) { - val = (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.rfc3339DateString)(val); + val = (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.rfc3339DateString)(val); } else if (val instanceof _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]) { val = val.jsonHelper(); } else if (val === undefined || val === null || val === false || Array.isArray(val) && val.length == 0 || typeof val == 'object' && Object.keys(val).length == 0) { @@ -5215,7 +15344,7 @@ class Tinode { this._humanLanguage = navigator.language || 'en-US'; } _connection_js__WEBPACK_IMPORTED_MODULE_3__["default"].logger = this.logger; - (_drafty_js__WEBPACK_IMPORTED_MODULE_5___default().logger) = this.logger; + (_drafty_js__WEBPACK_IMPORTED_MODULE_6___default().logger) = this.logger; if (config.transport != 'lp' && config.transport != 'ws') { config.transport = detectTransport(); } @@ -5243,11 +15372,11 @@ class Tinode { return; } if (data.name == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) { - topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.TopicMe(); + topic = new _topic_js__WEBPACK_IMPORTED_MODULE_9__.TopicMe(); } else if (data.name == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND) { - topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.TopicFnd(); + topic = new _topic_js__WEBPACK_IMPORTED_MODULE_9__.TopicFnd(); } else { - topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic(data.name); + topic = new _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic(data.name); } this._db.deserializeTopic(topic, data); this.#attachCacheToTopic(topic); @@ -5257,7 +15386,7 @@ class Tinode { }); }).then(_ => { return this._db.mapUsers(data => { - this.#cachePut('user', data.uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.mergeObj)({}, data.public)); + this.#cachePut('user', data.uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.mergeObj)({}, data.public)); }); }).then(_ => { return Promise.all(prom); @@ -5321,7 +15450,7 @@ class Tinode { if (id) { promise = this.#makePromise(id); } - pkt = (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.simplify)(pkt); + pkt = (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.simplify)(pkt); let msg = JSON.stringify(pkt); this.logger("out: " + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg)); try { @@ -5347,7 +15476,7 @@ class Tinode { } return; } - let pkt = JSON.parse(data, _utils_js__WEBPACK_IMPORTED_MODULE_9__.jsonParseHelper); + let pkt = JSON.parse(data, _utils_js__WEBPACK_IMPORTED_MODULE_10__.jsonParseHelper); if (!pkt) { this.logger("in: " + data); this.logger("ERROR: failed to parse data"); @@ -5608,13 +15737,13 @@ class Tinode { if (pub) { return { user: uid, - public: (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.mergeObj)({}, pub) + public: (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.mergeObj)({}, pub) }; } return undefined; }; topic._cachePutUser = (uid, user) => { - this.#cachePut('user', uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.mergeObj)({}, user.public)); + this.#cachePut('user', uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.mergeObj)({}, user.public)); }; topic._cacheDelUser = uid => { this.#cacheDel('user', uid); @@ -5665,25 +15794,25 @@ class Tinode { return null; } static topicType(name) { - return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.topicType(name); + return _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic.topicType(name); } static isMeTopicName(name) { - return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isMeTopicName(name); + return _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic.isMeTopicName(name); } static isGroupTopicName(name) { - return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isGroupTopicName(name); + return _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic.isGroupTopicName(name); } static isP2PTopicName(name) { - return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isP2PTopicName(name); + return _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic.isP2PTopicName(name); } static isCommTopicName(name) { - return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isCommTopicName(name); + return _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic.isCommTopicName(name); } static isNewGroupTopicName(name) { - return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isNewGroupTopicName(name); + return _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic.isNewGroupTopicName(name); } static isChannelTopicName(name) { - return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isChannelTopicName(name); + return _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic.isChannelTopicName(name); } static getVersion() { return _config_js__WEBPACK_IMPORTED_MODULE_1__.VERSION; @@ -5692,7 +15821,7 @@ class Tinode { WebSocketProvider = wsProvider; XHRProvider = xhrProvider; _connection_js__WEBPACK_IMPORTED_MODULE_3__["default"].setNetworkProviders(WebSocketProvider, XHRProvider); - _large_file_js__WEBPACK_IMPORTED_MODULE_6__["default"].setNetworkProvider(XHRProvider); + _large_file_js__WEBPACK_IMPORTED_MODULE_7__["default"].setNetworkProvider(XHRProvider); } static setDatabaseProvider(idbProvider) { IndexedDBProvider = idbProvider; @@ -5741,7 +15870,7 @@ class Tinode { if (typeof url != 'string') { return url; } - if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(url)) { + if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.isUrlRelative)(url)) { const base = 'scheme://host/'; const parsed = new URL(url, base); if (this._apiKey) { @@ -5772,7 +15901,7 @@ class Tinode { pkt.acc.tmpsecret = params.secret; if (Array.isArray(params.attachments) && params.attachments.length > 0) { pkt.extra = { - attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(ref)) + attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.isUrlRelative)(ref)) }; } } @@ -5881,7 +16010,7 @@ class Tinode { } if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) { pkt.extra = { - attachments: setParams.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(ref)) + attachments: setParams.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.isUrlRelative)(ref)) }; } if (setParams.tags) { @@ -5897,10 +16026,10 @@ class Tinode { } createMessage(topic, content, noEcho) { const pkt = this.#initPacket('pub', topic); - let dft = typeof content == 'string' ? _drafty_js__WEBPACK_IMPORTED_MODULE_5___default().parse(content) : content; - if (dft && !_drafty_js__WEBPACK_IMPORTED_MODULE_5___default().isPlainText(dft)) { + let dft = typeof content == 'string' ? _drafty_js__WEBPACK_IMPORTED_MODULE_6___default().parse(content) : content; + if (dft && !_drafty_js__WEBPACK_IMPORTED_MODULE_6___default().isPlainText(dft)) { pkt.pub.head = { - mime: _drafty_js__WEBPACK_IMPORTED_MODULE_5___default().getContentType() + mime: _drafty_js__WEBPACK_IMPORTED_MODULE_6___default().getContentType() }; content = dft; } @@ -5921,7 +16050,7 @@ class Tinode { }; if (attachments) { msg.extra = { - attachments: attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(ref)) + attachments: attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.isUrlRelative)(ref)) }; } return this.#send(msg, pub.id); @@ -5948,12 +16077,12 @@ class Tinode { topic._updateReceived(data.seq, 'fake-uid'); } if (data.xfrom && !this.#cacheGet('user', data.xfrom)) { - this.getMeta(data.xfrom, new _meta_builder_js__WEBPACK_IMPORTED_MODULE_7__["default"]().withDesc().build()).catch(err => { + this.getMeta(data.xfrom, new _meta_builder_js__WEBPACK_IMPORTED_MODULE_8__["default"]().withDesc().build()).catch(err => { this.logger("Failed to get the name of a new sender", err); }); } topic.subscribe(null).then(_ => { - return topic.getMeta(new _meta_builder_js__WEBPACK_IMPORTED_MODULE_7__["default"](topic).withLaterData(24).withLaterDel(24).build()); + return topic.getMeta(new _meta_builder_js__WEBPACK_IMPORTED_MODULE_8__["default"](topic).withLaterData(24).withLaterDel(24).build()); }).then(_ => { topic.leaveDelayed(false, 1000); }).catch(err => { @@ -5994,7 +16123,7 @@ class Tinode { } getMeta(topic, params) { const pkt = this.#initPacket('get', topic); - pkt.get = (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.mergeObj)(pkt.get, params); + pkt.get = (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.mergeObj)(pkt.get, params); return this.#send(pkt, pkt.get.id); } setMeta(topic, params) { @@ -6009,7 +16138,7 @@ class Tinode { }); if (Array.isArray(params.attachments) && params.attachments.length > 0) { pkt.extra = { - attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(ref)) + attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.isUrlRelative)(ref)) }; } } @@ -6080,11 +16209,11 @@ class Tinode { let topic = this.#cacheGet('topic', topicName); if (!topic && topicName) { if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) { - topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.TopicMe(); + topic = new _topic_js__WEBPACK_IMPORTED_MODULE_9__.TopicMe(); } else if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND) { - topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.TopicFnd(); + topic = new _topic_js__WEBPACK_IMPORTED_MODULE_9__.TopicFnd(); } else { - topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic(topicName); + topic = new _topic_js__WEBPACK_IMPORTED_MODULE_9__.Topic(topicName); } this.#attachCacheToTopic(topic); topic._cachePutSelf(); @@ -6113,7 +16242,7 @@ class Tinode { return this.getTopic(_config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND); } getLargeFileHelper() { - return new _large_file_js__WEBPACK_IMPORTED_MODULE_6__["default"](this, _config_js__WEBPACK_IMPORTED_MODULE_1__.PROTOCOL_VERSION); + return new _large_file_js__WEBPACK_IMPORTED_MODULE_7__["default"](this, _config_js__WEBPACK_IMPORTED_MODULE_1__.PROTOCOL_VERSION); } getCurrentUserID() { return this._myUID; @@ -6128,7 +16257,7 @@ class Tinode { return this._serverInfo; } report(action, target) { - return this.publish(_config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_SYS, _drafty_js__WEBPACK_IMPORTED_MODULE_5___default().attachJSON(null, { + return this.publish(_config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_SYS, _drafty_js__WEBPACK_IMPORTED_MODULE_6___default().attachJSON(null, { 'action': action, 'target': target })); diff --git a/umd/tinode.dev.js.map b/umd/tinode.dev.js.map index 3e9fe4c..68df8a6 100644 --- a/umd/tinode.dev.js.map +++ b/umd/tinode.dev.js.map @@ -1 +1 @@ -{"version":3,"file":"tinode.dev.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/access-mode.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/config.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/drafty.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/utils.js","webpack://tinode/./version.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/tinode.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, () => {\nreturn ","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the element from the end of the buffer.\n * @memberof Tinode.CBuffer#\n * @param {number} at - position to fetch from, counting from the end;\n * undefined or null mean \"last\".\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(at) {\n at |= 0;\n return this.buffer.length > at ? this.buffer[this.buffer.length - 1 - at] : undefined;\n }\n\n /**\n * Add new element(s) to the buffer. Variadic: takes one or more arguments. If an array is passed as a single\n * argument, its elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive).\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive).\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = startIdx | 0;\n beforeIdx = beforeIdx || this.buffer.length;\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2023 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.21';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Settings for exponential backoff\nconst _BOFF_BASE = 2000; // 2000 milliseconds, minimum delay between reconnects\nconst _BOFF_MAX_ITER = 10; // Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes\nconst _BOFF_JITTER = 0.3; // Add random delay\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = _BOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _BOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= _BOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) { // 1 == OPENED\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 1;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n // Object store (table) for topics. The primary key is topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n };\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = (event) => {\n resolve(event.target.result);\n };\n trx.onerror = (event) => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {Object} query - parameters of the message range to retrieve.\n * @param {number=} query.since - the least message ID to retrieve (inclusive).\n * @param {number=} query.before - the greatest message ID to retrieve (exclusive).\n * @param {number=} query.limit - the maximum number of messages to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n query = query || {};\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n const result = [];\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n const trx = this.db.transaction(['message']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev').onsuccess = (event) => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'read', 'recv', 'seq', 'clear', 'defacs',\n 'creds', 'public', 'trusted', 'private', 'touched', '_deleted'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @copyright 2015-2022 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n *

Supports conversion of user keyboard input to formatted text:

\n * \n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n *
\n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * 
\n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst JSON_MIME_TYPE = 'application/json';\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
',\n close: _ => '
'\n },\n // Row: logic grouping of elements\n RW: {\n open: _ => '
',\n close: _ => '
'\n },\n // Quoted block.\n QQ: {\n open: _ => '
',\n close: _ => '
',\n props: (data) => {\n return data ? {} : null;\n },\n },\n // Video call\n VC: {\n open: _ => '
',\n close: _ => '
',\n props: data => {\n if (!data) return {};\n return {\n 'data-duration': data.duration,\n 'data-state': data.state,\n };\n }\n },\n // Video.\n VD: {\n open: data => {\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return '';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = result.txt.length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n result.fmt = result.fmt.concat(block.fmt.map((s) => {\n s.at += offset;\n return s;\n }));\n }\n if (block.ent) {\n result.fmt = result.fmt.concat(block.ent.map((s) => {\n s.at += offset;\n return s;\n }));\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = first.txt.length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: quote.txt.length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: (name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: JSON_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: content.txt.length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup.\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (entData.mime != JSON_MIME_TYPE && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > txt.length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n let tree = spansToTree({}, txt, 0, txt.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, text, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: text.substring(start, end)\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: text.substring(start, span.start)\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, text, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: text.substring(start, end)\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = doc.txt.length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = doc.txt.length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const len = node.text.length;\n if (len > limit) {\n node.text = node.text.substring(0, limit) + tail;\n limit = -1;\n } else {\n limit -= len;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (c.data['mime'] == JSON_MIME_TYPE) {\n // JSON attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n mergeObj,\n mergeToCache,\n normalizeArray\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacls.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {boolean} forward if true, request newer messages.\n */\n getMessagesPage(limit, forward) {\n let query = forward ?\n this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then((count) => {\n if (count == limit) {\n // Got enough messages from local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = forward ? this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n let promise = this.getMeta(query.build());\n if (!forward) {\n promise = promise.then(ctrl => {\n if (ctrl && ctrl.params && !ctrl.params.count) {\n this._noEarlierMsgs = true;\n }\n });\n }\n return promise;\n });\n }\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subsriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Delete messages. Hard-deleting messages requires Owner permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.DelRange[]} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n // Sort ranges in accending order by low, the descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return true;\n }\n if (r1.low == r2.low) {\n return !r2.hi || (r1.hi >= r2.hi);\n }\n return false;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n let tosend = ranges.reduce((out, r) => {\n if (r.low < Const.LOCAL_SEQID) {\n if (!r.hi || r.hi < Const.LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: this._maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = ctrl.params.del;\n }\n\n ranges.forEach((r) => {\n if (r.hi) {\n this.flushMessageRange(r.low, r.hi);\n } else {\n this.flushMessage(r.low);\n }\n });\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} list - list of seq IDs to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesList(list, hardDel) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n let ranges = list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n // Send {del} message, return promise\n return this.delMessages(ranges, hardDel);\n }\n\n /**\n * Delete original message and edited variants. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delMessagesEdits(seq, hardDel) {\n const list = [seq];\n this.messageVersions(seq, msg => list.push(msg.seq));\n // Send {del} message, return promise\n return this.delMessagesList(list, hardDel);\n }\n\n /**\n * Delete topic. Requires Owner permission. Wrapper for {@link Tinode#delTopic}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hard - had-delete topic.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delTopic(hard) {\n if (this._deleted) {\n // The topic is already deleted at the server, just remove from DB.\n this._gone();\n return Promise.resolve(null);\n }\n\n return this._tinode.delTopic(this.name, hard).then(ctrl => {\n this._deleted = true;\n this._resetSub();\n this._gone();\n return ctrl;\n });\n }\n /**\n * Delete subscription. Requires Share permission. Wrapper for {@link Tinode#delSubscription}.\n * @memberof Tinode.Topic#\n *\n * @param {string} user - ID of the user to remove subscription for.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delSubscription(user) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delSubscription(this.name, user).then(ctrl => {\n // Remove the object from the subscription cache;\n delete this._users[user];\n // Notify listeners\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n return ctrl;\n });\n }\n /**\n * Send a read/recv notification.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what notification to send: recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.} a copy of tags\n */\n tags() {\n // Return a copy.\n return this._tags.slice(0);\n }\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (this._isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by seq.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent message from cache. This method counts all messages, including deleted ranges.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast();\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} newer - if true, check for newer messages only.\n */\n msgHasMoreMessages(newer) {\n return newer ? this.seq > this._maxSeq :\n // _minSeq could be more than 1, but earlier messages could have been deleted.\n (this._minSeq > 1 && !this._noEarlierMsgs);\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n _isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!this._isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n data.content = Drafty.updateVideoCall(data.content, {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n });\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived or in response to received\n // {ctrl} after setMeta-sub.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags.length == 1 && tags[0] == Const.DEL_CHAR) {\n tags = [];\n }\n this._tags = tags;\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n const topic = this;\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(function(range) {\n if (!range.hi) {\n count++;\n topic.flushMessage(range.low);\n } else {\n for (let i = range.low; i < range.hi; i++) {\n count++;\n topic.flushMessage(i);\n }\n }\n });\n }\n\n if (count > 0) {\n // this._updateDeletedRanges();\n\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, params) {\n const {\n since,\n before,\n limit\n } = params || {};\n return db.readMessages(this.name, {\n since: since,\n before: before,\n limit: limit || Const.DEFAULT_MESSAGES_PAGE\n })\n .then(msgs => {\n msgs.forEach((data) => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n return msgs.length;\n });\n }\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n}\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Ignore properties where ignore[property] is true.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src, ignore) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return src;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (!ignore || !ignore[prop]) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n // FIXME: probably need to log something here.\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval, ignore) {\n cache[key] = mergeObj(cache[key], newval, ignore);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, strip empty and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out.sort().filter(function(item, pos, ary) {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n","export const PACKAGE_VERSION = \"0.22.12\";\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2022 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.20\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n Topic,\n TopicMe,\n TopicFnd\n} from './topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format /\n this._appName = config.appName || \"Undefined\";\n\n // API Key.\n this._apiKey = config.apiKey;\n\n // Name and version of the browser.\n this._platform = config.platform || 'web';\n // Underlying OS.\n if (typeof navigator != 'undefined') {\n this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n this._hwos = navigator.platform;\n // This is the default language. It could be changed by client.\n this._humanLanguage = navigator.language || 'en-US';\n }\n\n Connection.logger = this.logger;\n Drafty.logger = this.logger;\n\n // WebSocket or long polling network connection.\n if (config.transport != 'lp' && config.transport != 'ws') {\n config.transport = detectTransport();\n }\n this._connection = new Connection(config, Const.PROTOCOL_VERSION, /* autoreconnect */ true);\n this._connection.onMessage = (data) => {\n // Call the main message dispatcher.\n this.#dispatchMessage(data);\n }\n\n // Ready to start sending.\n this._connection.onOpen = _ => this.#connectionOpen();\n this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n\n // Wrapper for the reconnect iterator callback.\n this._connection.onAutoreconnectIteration = (timeout, promise) => {\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout, promise);\n }\n }\n\n this._persist = config.persist;\n // Initialize object regardless. It simplifies the code.\n this._db = new DBCache(err => {\n this.logger('DB', err);\n }, this.logger);\n\n if (this._persist) {\n // Create the persistent cache.\n // Store promises to be resolved when messages load into memory.\n const prom = [];\n this._db.initDatabase().then(_ => {\n // First load topics into memory.\n return this._db.mapTopics((data) => {\n let topic = this.#cacheGet('topic', data.name);\n if (topic) {\n return;\n }\n if (data.name == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (data.name == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(data.name);\n }\n this._db.deserializeTopic(topic, data);\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Topic loaded from DB is not new.\n delete topic._new;\n // Request to load messages and save the promise.\n prom.push(topic._loadMessages(this._db));\n });\n }).then(_ => {\n // Then load users.\n return this._db.mapUsers((data) => {\n this.#cachePut('user', data.uid, mergeObj({}, data.public));\n });\n }).then(_ => {\n // Now wait for all messages to finish loading.\n return Promise.all(prom);\n }).then(_ => {\n if (onComplete) {\n onComplete();\n }\n this.logger(\"Persistent cache initialized.\");\n }).catch(err => {\n if (onComplete) {\n onComplete(err);\n }\n this.logger(\"Failed to initialize persistent cache:\", err);\n });\n } else {\n this._db.deleteDatabase().then(_ => {\n if (onComplete) {\n onComplete();\n }\n });\n }\n }\n\n // Private methods.\n\n // Console logger. Babel somehow fails to parse '...rest' parameter.\n logger(str, ...args) {\n if (this._loggingEnabled) {\n const d = new Date();\n const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' +\n ('0' + d.getUTCMinutes()).slice(-2) + ':' +\n ('0' + d.getUTCSeconds()).slice(-2) + '.' +\n ('00' + d.getUTCMilliseconds()).slice(-3);\n\n console.log('[' + dateString + ']', str, args.join(' '));\n }\n }\n\n // Generator of default promises for sent packets.\n #makePromise(id) {\n let promise = null;\n if (id) {\n promise = new Promise((resolve, reject) => {\n // Stored callbacks will be called when the response packet with this Id arrives\n this._pendingPromises[id] = {\n 'resolve': resolve,\n 'reject': reject,\n 'ts': new Date()\n };\n });\n }\n return promise;\n };\n\n // Resolve or reject a pending promise.\n // Unresolved promises are stored in _pendingPromises.\n #execPromise(id, code, onOK, errorText) {\n const callbacks = this._pendingPromises[id];\n if (callbacks) {\n delete this._pendingPromises[id];\n if (code >= 200 && code < 400) {\n if (callbacks.resolve) {\n callbacks.resolve(onOK);\n }\n } else if (callbacks.reject) {\n callbacks.reject(new CommError(errorText, code));\n }\n }\n }\n\n // Send a packet. If packet id is provided return a promise.\n #send(pkt, id) {\n let promise;\n if (id) {\n promise = this.#makePromise(id);\n }\n pkt = simplify(pkt);\n let msg = JSON.stringify(pkt);\n this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n try {\n this._connection.sendText(msg);\n } catch (err) {\n // If sendText throws, wrap the error in a promise or rethrow.\n if (id) {\n this.#execPromise(id, Connection.NETWORK_ERROR, null, err.message);\n } else {\n throw err;\n }\n }\n return promise;\n }\n\n // The main message dispatcher.\n #dispatchMessage(data) {\n // Skip empty response. This happens when LP times out.\n if (!data)\n return;\n\n this._inPacketCount++;\n\n // Send raw message to listener\n if (this.onRawMessage) {\n this.onRawMessage(data);\n }\n\n if (data === '0') {\n // Server response to a network probe.\n if (this.onNetworkProbe) {\n this.onNetworkProbe();\n }\n // No processing is necessary.\n return;\n }\n\n let pkt = JSON.parse(data, jsonParseHelper);\n if (!pkt) {\n this.logger(\"in: \" + data);\n this.logger(\"ERROR: failed to parse data\");\n } else {\n this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n\n // Send complete packet to listener\n if (this.onMessage) {\n this.onMessage(pkt);\n }\n\n if (pkt.ctrl) {\n // Handling {ctrl} message\n if (this.onCtrlMessage) {\n this.onCtrlMessage(pkt.ctrl);\n }\n\n // Resolve or reject a pending promise, if any\n if (pkt.ctrl.id) {\n this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n }\n setTimeout(_ => {\n if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n // User evicted from topic.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._resetSub();\n if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n topic._gone();\n }\n }\n } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n if (pkt.ctrl.params.what == 'data') {\n // code=208, all messages received: \"params\":{\"count\":11,\"what\":\"data\"},\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._allMessagesReceived(pkt.ctrl.params.count);\n }\n } else if (pkt.ctrl.params.what == 'sub') {\n // code=204, the topic has no (refreshed) subscriptions.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n // Trigger topic.onSubsUpdated.\n topic._processMetaSubs([]);\n }\n }\n }\n }, 0);\n } else {\n setTimeout(_ => {\n if (pkt.meta) {\n // Handling a {meta} message.\n // Preferred API: Route meta to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.meta.topic);\n if (topic) {\n topic._routeMeta(pkt.meta);\n }\n\n if (pkt.meta.id) {\n this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n }\n\n // Secondary API: callback\n if (this.onMetaMessage) {\n this.onMetaMessage(pkt.meta);\n }\n } else if (pkt.data) {\n // Handling {data} message\n // Preferred API: Route data to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.data.topic);\n if (topic) {\n topic._routeData(pkt.data);\n }\n\n // Secondary API: Call callback\n if (this.onDataMessage) {\n this.onDataMessage(pkt.data);\n }\n } else if (pkt.pres) {\n // Handling {pres} message\n // Preferred API: Route presence to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.pres.topic);\n if (topic) {\n topic._routePres(pkt.pres);\n }\n\n // Secondary API - callback\n if (this.onPresMessage) {\n this.onPresMessage(pkt.pres);\n }\n } else if (pkt.info) {\n // {info} message - read/received notifications and key presses\n // Preferred API: Route {info}} to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.info.topic);\n if (topic) {\n topic._routeInfo(pkt.info);\n }\n\n // Secondary API - callback\n if (this.onInfoMessage) {\n this.onInfoMessage(pkt.info);\n }\n } else {\n this.logger(\"ERROR: Unknown packet received.\");\n }\n }, 0);\n }\n }\n }\n\n // Connection open, ready to start sending.\n #connectionOpen() {\n if (!this._expirePromises) {\n // Reject promises which have not been resolved for too long.\n this._expirePromises = setInterval(_ => {\n const err = new CommError(\"timeout\", 504);\n const expires = new Date(new Date().getTime() - Const.EXPIRE_PROMISES_TIMEOUT);\n for (let id in this._pendingPromises) {\n let callbacks = this._pendingPromises[id];\n if (callbacks && callbacks.ts < expires) {\n this.logger(\"Promise expired\", id);\n delete this._pendingPromises[id];\n if (callbacks.reject) {\n callbacks.reject(err);\n }\n }\n }\n }, Const.EXPIRE_PROMISES_PERIOD);\n }\n this.hello();\n }\n\n #disconnected(err, code) {\n this._inPacketCount = 0;\n this._serverInfo = null;\n this._authenticated = false;\n\n if (this._expirePromises) {\n clearInterval(this._expirePromises);\n this._expirePromises = null;\n }\n\n // Mark all topics as unsubscribed\n this.#cacheMap('topic', (topic, key) => {\n topic._resetSub();\n });\n\n // Reject all pending promises\n for (let key in this._pendingPromises) {\n const callbacks = this._pendingPromises[key];\n if (callbacks && callbacks.reject) {\n callbacks.reject(err);\n }\n }\n this._pendingPromises = {};\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n }\n\n // Get User Agent string\n #getUserAgent() {\n return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + Const.LIBRARY;\n }\n\n // Generator of packets stubs\n #initPacket(type, topic) {\n switch (type) {\n case 'hi':\n return {\n 'hi': {\n 'id': this.getNextUniqueId(),\n 'ver': Const.VERSION,\n 'ua': this.#getUserAgent(),\n 'dev': this._deviceToken,\n 'lang': this._humanLanguage,\n 'platf': this._platform\n }\n };\n\n case 'acc':\n return {\n 'acc': {\n 'id': this.getNextUniqueId(),\n 'user': null,\n 'scheme': null,\n 'secret': null,\n 'tmpscheme': null,\n 'tmpsecret': null,\n 'login': false,\n 'tags': null,\n 'desc': {},\n 'cred': {}\n }\n };\n\n case 'login':\n return {\n 'login': {\n 'id': this.getNextUniqueId(),\n 'scheme': null,\n 'secret': null\n }\n };\n\n case 'sub':\n return {\n 'sub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'set': {},\n 'get': {}\n }\n };\n\n case 'leave':\n return {\n 'leave': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'unsub': false\n }\n };\n\n case 'pub':\n return {\n 'pub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'noecho': false,\n 'head': null,\n 'content': {}\n }\n };\n\n case 'get':\n return {\n 'get': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'desc': {},\n 'sub': {},\n 'data': {}\n }\n };\n\n case 'set':\n return {\n 'set': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'desc': {},\n 'sub': {},\n 'tags': [],\n 'ephemeral': {}\n }\n };\n\n case 'del':\n return {\n 'del': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'delseq': null,\n 'user': null,\n 'hard': false\n }\n };\n\n case 'note':\n return {\n 'note': {\n // no id by design (except calls).\n 'topic': topic,\n 'what': null, // one of \"recv\", \"read\", \"kp\", \"call\"\n 'seq': undefined // the server-side message id acknowledged as received or read.\n }\n };\n\n default:\n throw new Error(`Unknown packet type requested: ${type}`);\n }\n }\n\n // Cache management\n #cachePut(type, name, obj) {\n this._cache[type + ':' + name] = obj;\n }\n #cacheGet(type, name) {\n return this._cache[type + ':' + name];\n }\n #cacheDel(type, name) {\n delete this._cache[type + ':' + name];\n }\n\n // Enumerate all items in cache, call func for each item.\n // Enumeration stops if func returns true.\n #cacheMap(type, func, context) {\n const key = type ? type + ':' : undefined;\n for (let idx in this._cache) {\n if (!key || idx.indexOf(key) == 0) {\n if (func.call(context, this._cache[idx], idx)) {\n break;\n }\n }\n }\n }\n\n // Make limited cache management available to topic.\n // Caching user.public only. Everything else is per-topic.\n #attachCacheToTopic(topic) {\n topic._tinode = this;\n\n topic._cacheGetUser = (uid) => {\n const pub = this.#cacheGet('user', uid);\n if (pub) {\n return {\n user: uid,\n public: mergeObj({}, pub)\n };\n }\n return undefined;\n };\n topic._cachePutUser = (uid, user) => {\n this.#cachePut('user', uid, mergeObj({}, user.public));\n };\n topic._cacheDelUser = (uid) => {\n this.#cacheDel('user', uid);\n };\n topic._cachePutSelf = _ => {\n this.#cachePut('topic', topic.name, topic);\n };\n topic._cacheDelSelf = _ => {\n this.#cacheDel('topic', topic.name);\n };\n }\n\n // On successful login save server-provided data.\n #loginSuccessful(ctrl) {\n if (!ctrl.params || !ctrl.params.user) {\n return ctrl;\n }\n // This is a response to a successful login,\n // extract UID and security token, save it in Tinode module\n this._myUID = ctrl.params.user;\n this._authenticated = (ctrl && ctrl.code >= 200 && ctrl.code < 300);\n if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n this._authToken = {\n token: ctrl.params.token,\n expires: ctrl.params.expires\n };\n } else {\n this._authToken = null;\n }\n\n if (this.onLogin) {\n this.onLogin(ctrl.code, ctrl.text);\n }\n\n return ctrl;\n }\n\n // Static methods.\n /**\n * Helper method to package account credential.\n *\n * @param {string | Credential} meth - validation method or object with validation data.\n * @param {string=} val - validation value (e.g. email or phone number).\n * @param {Object=} params - validation parameters.\n * @param {string=} resp - validation response.\n *\n * @returns {Array.} array with a single credential or null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.} tags - array of string tags for user discovery.\n * @property {string} scheme - Temporary authentication scheme for password reset.\n * @property {string} secret - Temporary authentication secret for password reset.\n * @property {Array.=} attachments - Array of references to out of band attachments used in account description.\n */\n /**\n * @typedef DefAcs\n * @type {Object}\n * @property {string=} auth - Access mode for me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.=} attachments - URLs of out of band attachments used in parameters.\n */\n /**\n * @typedef SetDesc\n * @type {Object}\n * @property {DefAcs=} defacs - Default access mode.\n * @property {Object=} public - Free-form topic description, publically accessible.\n * @property {Object=} private - Free-form topic description accessible only to the owner.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n */\n /**\n * @typedef SetSub\n * @type {Object}\n * @property {string=} user - UID of the user affected by the request. Default (empty) - current user.\n * @property {string=} mode - User access mode, either requested or assigned dependent on context.\n */\n /**\n * Send a topic subscription request.\n *\n * @param {string} topic - Name of the topic to subscribe to.\n * @param {GetQuery=} getParams - Optional subscription metadata query\n * @param {SetParams=} setParams - Optional initialization parameters\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n subscribe(topicName, getParams, setParams) {\n const pkt = this.#initPacket('sub', topicName)\n if (!topicName) {\n topicName = Const.TOPIC_NEW;\n }\n\n pkt.sub.get = getParams;\n\n if (setParams) {\n if (setParams.sub) {\n pkt.sub.set.sub = setParams.sub;\n }\n\n if (setParams.desc) {\n const desc = setParams.desc;\n if (Tinode.isNewGroupTopicName(topicName)) {\n // Full set.desc params are used for new topics only\n pkt.sub.set.desc = desc;\n } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n // Use optional default permissions only.\n pkt.sub.set.desc = {\n defacs: desc.defacs\n };\n }\n }\n\n // See if external objects were used in topic description.\n if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n pkt.extra = {\n attachments: setParams.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n\n if (setParams.tags) {\n pkt.sub.set.tags = setParams.tags;\n }\n }\n return this.#send(pkt, pkt.sub.id);\n }\n\n /**\n * Detach and optionally unsubscribe from the topic\n *\n * @param {string} topic - Topic to detach from.\n * @param {boolean} unsub - If true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.=} attachments - array of URLs with attachments.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publishMessage(pub, attachments) {\n // Make a shallow copy. Needed in order to clear locally-assigned temp values;\n pub = Object.assign({}, pub);\n pub.seq = undefined;\n pub.from = undefined;\n pub.ts = undefined;\n const msg = {\n pub: pub,\n };\n if (attachments) {\n msg.extra = {\n attachments: attachments.filter(ref => isUrlRelative(ref))\n };\n }\n return this.#send(msg, pub.id);\n }\n\n /**\n * Out of band notification: notify topic that an external (push) notification was recived by the client.\n *\n * @param {object} data - notification payload.\n * @param {string} data.what - notification type, 'msg', 'read', 'sub'.\n * @param {string} data.topic - name of the updated topic.\n * @param {number=} data.seq - seq ID of the affected message.\n * @param {string=} data.xfrom - UID of the sender.\n * @param {object=} data.given - new subscription 'given', e.g. 'ASWP...'.\n * @param {object=} data.want - new subscription 'want', e.g. 'RWJ...'.\n */\n oobNotification(data) {\n this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n\n switch (data.what) {\n case 'msg':\n if (!data.seq || data.seq < 1 || !data.topic) {\n // Server sent invalid data.\n break;\n }\n\n if (!this.isConnected()) {\n // Let's ignore the message if there is no connection: no connection means there are no open\n // tabs with Tinode.\n break;\n }\n\n const topic = this.#cacheGet('topic', data.topic);\n if (!topic) {\n // TODO: check if there is a case when a message can arrive from an unknown topic.\n break;\n }\n\n if (topic.isSubscribed()) {\n // No need to fetch: topic is already subscribed and got data through normal channel.\n break;\n }\n\n if (topic.maxMsgSeq() < data.seq) {\n if (topic.isChannelType()) {\n topic._updateReceived(data.seq, 'fake-uid');\n }\n\n // New message.\n if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n // Message from unknown sender, fetch description from the server.\n // Sending asynchronously without a subscription.\n this.getMeta(data.xfrom, new MetaGetBuilder().withDesc().build()).catch(err => {\n this.logger(\"Failed to get the name of a new sender\", err);\n });\n }\n\n topic.subscribe(null).then(_ => {\n return topic.getMeta(new MetaGetBuilder(topic).withLaterData(24).withLaterDel(24).build());\n }).then(_ => {\n // Allow data fetch to complete and get processed successfully.\n topic.leaveDelayed(false, 1000);\n }).catch(err => {\n this.logger(\"On push data fetch failed\", err);\n }).finally(_ => {\n this.getMeTopic()._refreshContact('msg', topic);\n });\n }\n break;\n\n case 'read':\n this.getMeTopic()._routePres({\n what: 'read',\n seq: data.seq\n });\n break;\n\n case 'sub':\n if (!this.isMe(data.xfrom)) {\n // TODO: handle updates from other users.\n break;\n }\n\n const mode = {\n given: data.modeGiven,\n want: data.modeWant\n };\n const acs = new AccessMode(mode);\n const pres = (!acs.mode || acs.mode == AccessMode._NONE) ?\n // Subscription deleted.\n {\n what: 'gone',\n src: data.topic\n } :\n // New subscription or subscription updated.\n {\n what: 'acs',\n src: data.topic,\n dacs: mode\n };\n this.getMeTopic()._routePres(pres);\n break;\n\n default:\n this.logger(\"Unknown push type ignored\", data.what);\n }\n }\n\n /**\n * @typedef GetQuery\n * @type {Object}\n * @property {GetOptsType=} desc - If provided (even if empty), fetch topic description.\n * @property {GetOptsType=} sub - If provided (even if empty), fetch topic subscriptions.\n * @property {GetDataType=} data - If provided (even if empty), get messages.\n */\n\n /**\n * @typedef GetOptsType\n * @type {Object}\n * @property {Date=} ims - \"If modified since\", fetch data only it was was modified since stated date.\n * @property {number=} limit - Maximum number of results to return. Ignored when querying topic description.\n */\n\n /**\n * @typedef GetDataType\n * @type {Object}\n * @property {number=} since - Load messages with seq id equal or greater than this value.\n * @property {number=} before - Load messages with seq id lower than this number.\n * @property {number=} limit - Maximum number of results to return.\n */\n\n /**\n * Request topic metadata\n *\n * @param {string} topic - Name of the topic to query.\n * @param {GetQuery} params - Parameters of the query. Use {@link Tinode.MetaGetBuilder} to generate.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n getMeta(topic, params) {\n const pkt = this.#initPacket('get', topic);\n\n pkt.get = mergeObj(pkt.get, params);\n\n return this.#send(pkt, pkt.get.id);\n }\n\n /**\n * Update topic's metadata: description, subscribtions.\n *\n * @param {string} topic - Topic to update.\n * @param {SetParams} params - topic metadata to update.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n setMeta(topic, params) {\n const pkt = this.#initPacket('set', topic);\n const what = [];\n\n if (params) {\n ['desc', 'sub', 'tags', 'cred', 'ephemeral'].forEach(function(key) {\n if (params.hasOwnProperty(key)) {\n what.push(key);\n pkt.set[key] = params[key];\n }\n });\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n if (what.length == 0) {\n return Promise.reject(new Error(\"Invalid {set} parameters\"));\n }\n\n return this.#send(pkt, pkt.set.id);\n }\n\n /**\n * Range of message IDs to delete.\n *\n * @typedef DelRange\n * @type {Object}\n * @property {number} low - low end of the range, inclusive (closed).\n * @property {number=} hi - high end of the range, exclusive (open).\n */\n /**\n * Delete some or all messages in a topic.\n *\n * @param {string} topic - Topic name to delete messages from.\n * @param {DelRange[]} list - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delMessages(topic, ranges, hard) {\n const pkt = this.#initPacket('del', topic);\n\n pkt.del.what = 'msg';\n pkt.del.delseq = ranges;\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete the topic alltogether. Requires Owner permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delTopic(topicName, hard) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'topic';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete subscription. Requires Share permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delSubscription(topicName, user) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'sub';\n pkt.del.user = user;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete credential. Always sent on 'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n"],"names":["AccessMode","constructor","acs","given","decode","want","mode","checkFlag","#checkFlag","val","side","flag","includes","Error","str","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","i","length","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","split","diff","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","g","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","CBuffer","comparator","undefined","unique","buffer","compare_","unique_","a","b","findNearest","#findNearest","elem","arr","exact","start","end","pivot","found","idx","insertSorted","#insertSorted","count","splice","getAt","at","getLast","put","insert","arguments","Array","isArray","delAt","r","delRange","since","before","reset","forEach","callback","startIdx","beforeIdx","context","call","find","nearest","filter","isEmpty","CommError","message","code","name","PACKAGE_VERSION","PROTOCOL_VERSION","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_SYS","TOPIC_CHAN","TOPIC_GRP","TOPIC_P2P","USER_NEW","LOCAL_SEQID","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","EXPIRE_PROMISES_TIMEOUT","EXPIRE_PROMISES_PERIOD","RECV_TIMEOUT","DEFAULT_MESSAGES_PAGE","DEL_CHAR","jsonParseHelper","WebSocketProvider","XHRProvider","NETWORK_ERROR","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","_BOFF_BASE","_BOFF_MAX_ITER","_BOFF_JITTER","makeBaseUrl","host","protocol","version","apiKey","url","Connection","log","_","boffTimer","boffIteration","boffClosed","socket","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","init_lp","init_ws","setNetworkProviders","wsProvider","xhrProvider","logger","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","boffReset","boffReconnect","#boffReconnect","clearTimeout","timeout","Math","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","boffStop","#boffStop","#boffReset","#init_lp","XDR_UNSENT","XDR_OPENED","XDR_HEADERS_RECEIVED","XDR_LOADING","XDR_DONE","_lpURL","_poller","_sender","lp_sender","url_","sender","onreadystatechange","evt","readyState","status","open","lp_poller","resolve","poller","promiseCompleted","pkt","JSON","parse","responseText","ctrl","params","sid","send","onOpen","onMessage","onDisconnect","text","abort","err","#init_ws","OPEN","close","conn","onerror","onopen","onclose","onmessage","data","DB_VERSION","DB_NAME","IDBProvider","DB","onError","db","disabled","mapObjects","#mapObjects","source","trx","transaction","event","target","error","objectStore","getAll","onsuccess","result","topic","initDatabase","req","onupgradeneeded","createObjectStore","keyPath","deleteDatabase","onblocked","isReady","updTopic","oncomplete","get","serializeTopic","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","src","updUser","uid","pub","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","serializeSubscription","mapSubscriptions","addMessage","add","serializeMessage","updMessageStatus","seq","_status","remMessages","from","to","range","readMessages","query","limit","openCursor","cursor","value","push","continue","topic_fields","#deserializeTopic","f","hasOwnProperty","tags","_tags","setAccessMode","read","unread","max","#serializeTopic","dst","getAccessMode","#serializeSubscription","fields","#serializeMessage","setDatabaseProvider","idbProvider","MAX_FORM_ELEMENTS","MAX_PREVIEW_ATTACHMENTS","MAX_PREVIEW_DATA_SIZE","JSON_MIME_TYPE","DRAFTY_MIME_TYPE","ALLOWED_ENT_FIELDS","INLINE_STYLES","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","test","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","bin","atob","buf","ArrayBuffer","Uint8Array","charCodeAt","URL","createObjectURL","Blob","type","base64toDataUrl","DECORATORS","props","href","id","act","ref","mime","Drafty","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","init","plainText","content","lines","entityMap","entityIndex","blx","line","spans","entities","tag","concat","spannify","block","sort","toSpanTree","chunks","chunkify","drafty","draftify","extractEntities","ranges","entity","index","tp","offset","len","key","map","s","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","Object","assign","quote","header","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","indexOf","appendButton","attachJSON","UNSAFE_toHTML","doc","tree","draftyToTree","htmlFormatter","values","join","treeBottomUp","format","original","formatter","shorten","light","shortenTree","lightEntity","treeToDrafty","forwardedContent","rmMention","node","parent","treeTopDown","lTrim","replyContent","convMNnQQnBR","startsWith","children","attachmentsToEnd","forwarding","toPlainText","isPlainText","toMarkdown","mdFormatter","def","isValid","txt_type","hasAttachments","attachments","hasEntities","styles","sanitizeEntities","copyEntData","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","span","chunk","chld","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","last","spansToTree","flatten","child","addNode","n","substring","att","subspans","inner","keymap","c","keys","newKey","transformer","stack","pop","tail","shortener","allow","lightCopy","trimStart","shift","match","extracted","el","startAt","plain","entries","dc","module","exports","isUrlRelative","addURLParam","relUrl","window","location","origin","searchParams","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","e","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","MetaGetBuilder","what","get_desc_ims","#get_desc_ims","updated","get_subs_ims","#get_subs_ims","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withEarlierData","_minSeq","withDesc","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withOneSub","withLaterOneSub","withLaterSub","withTags","withCred","withDel","withLaterDel","_maxDel","extract","build","getOwnPropertyNames","Const","mergeObj","mergeToCache","normalizeArray","Topic","callbacks","created","touched","Date","private","trusted","_users","_queuedSeqId","_noEarlierMsgs","_recvNotificationTimer","_credentials","_messageVersions","_messages","_attached","_new","_delayedLeaveTimer","onData","onMeta","onPres","onInfo","onMetaDesc","onMetaSub","onSubsUpdated","onTagsUpdated","onCredsUpdated","onDeleteTopic","onAllMessagesReceived","topicType","types","isMeTopicName","isGroupTopicName","isP2PTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","isSubscribed","subscribe","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","desc","_noForwarding","_processMetaDesc","createMessage","noEcho","publish","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_db","_cancelled","_fatal","leave","unsub","_resetSub","_gone","leaveDelayed","delay","getMeta","getMessagesPage","forward","startMetaQuery","_loadMessages","promise","setMeta","_processMetaSubs","_processMetaTags","cred","_processMetaCreds","subscriber","am","invite","archive","arch","delMessages","hard","r1","r2","low","hi","tosend","reduce","out","del","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","list","prev","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","_refreshContact","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","recv","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","cb","origSeq","versions","messages","sinceId","beforeId","msgs","unused1","unused2","_isReplacementMsg","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","msgHasMoreMessages","newer","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isArchived","isMeType","isChannelType","isGroupType","isCommType","isMe","head","replace","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","_routeInfo","_routeMeta","meta","_processDelMessages","clear","delseq","_routePres","pres","online","isTopicCached","dacs","info","subs","_updateCachedUser","creds","_allMessagesReceived","obj","cached","_cachePutUser","_updateReceived","TopicMe","onContactUpdate","turnOff","_myUID","cont","seen","when","updateCount","cacheRemTopic","getTopic","cr","findIndex","meth","done","resp","cacheGetTopic","tgt","ua","dummy","delCredential","method","contacts","getContact","getCredentials","TopicFnd","_contacts","indexBy","getPrototypeOf","prototype","date","isNaN","isValidDate","d","getTime","rfc3339DateString","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","ignore","prop","cache","newval","simplify","t","trim","toLowerCase","item","pos","ary","DBCache","WebSocket","XMLHttpRequest","IndexedDBProvider","indexedDB","initForNonBrowserApp","chars","btoa","global","input","output","charCode","bc","bs","String","fromCharCode","detectTransport","b64EncodeUnicode","encodeURIComponent","toSolidBytes","p1","jsonBuildHelper","jsonLoggerHelper","getBrowserInfo","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","userAgent","language","dispatchMessage","connectionOpen","disconnected","persist","cacheGet","attachCacheToTopic","cachePut","all","dateString","_len","args","_key","console","makePromise","#makePromise","execPromise","#execPromise","onOK","errorText","#send","stringify","#dispatchMessage","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","#connectionOpen","setInterval","expires","hello","#disconnected","clearInterval","cacheMap","getUserAgent","#getUserAgent","initPacket","#initPacket","#cachePut","#cacheGet","cacheDel","#cacheDel","#cacheMap","func","#attachCacheToTopic","_cacheDelUser","loginSuccessful","#loginSuccessful","onLogin","credential","getVersion","getLibrary","isNullValue","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","URI_TOPIC_ID_PREFIX"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"tinode.dev.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;AC/UA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AChBiC;AACjC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,WAAW,8CAAQ;AACnB;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4D;AACrD;AACP;AACA,WAAW,yEAAmB;AAC9B;;;;;;;;;;;;;;;;ACZiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8CAAQ;AAC5B;AACA,oEAAoE,sBAAsB;AAC1F;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACiC;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB,yBAAyB,0BAA0B;AACrH;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA,qDAAqD,yBAAyB;AAC9E;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpBsF;AACtF;AACA;AACA;AACA;AACA;AACA,qDAAqD,yBAAyB;AAC9E;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,mGAAgC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mGAAgC;AACzC,SAAS,mGAAgC;AACzC;AACA;AACA;AACA;;;;;;;;;;;;;;;AC3BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;;;;ACLwC;AACoC;AACZ;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAY;AAChC,mBAAmB,yFAA2B;AAC9C;AACA,KAAK;AACL;AACA;AACA,6BAA6B,6EAAqB;AAClD;AACA;AACA;AACA,uBAAuB,oDAAY;AACnC;AACA;AACA;AACA;AACA,QAAQ,yFAA2B;AACnC;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC3DwC;AACxC;AACA;AACA;AACO;AACP;AACA,WAAW,oDAAc;AACzB;AACA;AACA;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,kBAAkB,qDAAqD;AACvE;AACA;;;;;;;;;;;;;;;;ACV4E;AAC5E;AACA;AACA;AACO;AACP;AACA,gBAAgB,yFAA2B;AAC3C;AACA,KAAK;AACL,uCAAuC,oBAAoB;AAC3D;;;;;;;;;;;;;;;;ACV4E;AAC5E;AACA;AACA;AACO;AACP;AACA,gBAAgB,yFAA2B;AAC3C;AACA,KAAK;AACL,8CAA8C;AAC9C;AACA;AACA;AACA;AACA,KAAK,IAAI;AACT;;;;;;;;;;;;;;;;;ACfkE;AAC7B;AAC9B;AACP,gBAAgB,+EAAsB;AACtC,iBAAiB,iDAAW;AAC5B,sCAAsC,qBAAqB;AAC3D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;;ACbmC;AACe;AAChB;AACQ;AAC1C;AACA;AACA;AACO;AACP,8BAA8B,+CAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAAc;AACnC;AACA;AACA,qBAAqB,uDAAU;AAC/B;AACA;AACA,qBAAqB,+DAAc;AACnC;AACA,yBAAyB,uDAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8CAAM;AACjC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC3B6D;AACM;AACF;AACZ;AACZ;AAC8B;AAClC;AACa;AAC0B;AACF;AAC1E;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,2BAA2B,+EAAsB;AACjD,kBAAkB,6EAAqB;AACvC;AACA,kBAAkB,qDAAS;AAC3B;AACA,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2EAAa;AACzB;AACA;AACA;AACA,IAAI,iDAAS;AACb;AACA;AACA;AACA;AACA;AACA,IAAI,uFAA0B,gBAAgB,oCAAoC;AAClF;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAAc,aAAa,wCAAwC;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAS;AAC5B;AACA,IAAI,yFAA2B;AAC/B,4BAA4B,iEAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qDAAS;AACvC;AACA,yBAAyB,qDAAS;AAClC;AACA;AACA;AACA;AACA;AACA,gCAAgC,mFAAwB;AACxD,gCAAgC,qDAAS;AACzC,iCAAiC,qDAAS;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9FgE;AAC7B;AACiB;AACN;AAC9C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,+CAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iEAAe;AAChC;AACA,aAAa;AACb;AACA;AACA;AACA,iCAAiC,6EAAqB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+CAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+CAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4DAAa,GAAG,4FAA4F;AACvH;;;;;;;;;;;;;;;;;;AC/EkE;AACN;AACA;AAC5D;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,+EAAsB,oBAAoB,oCAAoC;AAChG,kBAAkB,+EAAsB,oBAAoB,oCAAoC;AAChG;AACA,eAAe,yEAAmB,0BAA0B,oCAAoC;AAChG;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6DAA6D;AAC/E,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA,WAAW,yEAAmB;AAC9B;;;;;;;;;;;;;;;;;;AC/B6D;AACR;AACZ;AACzC;AACA;AACA;AACO;AACP,eAAe,iEAAe;AAC9B;AACA;AACA;AACA;AACA;AACA,2BAA2B,qDAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yEAAmB;AACtC,mBAAmB,yEAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yEAAmB;AACtC,mBAAmB,yEAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC/EyC;AAC8B;AACI;AAC3E;AACA;AACA;AACO;AACP,8BAA8B;AAC9B;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA,mBAAmB,qDAAS;AAC5B,mCAAmC,mFAAwB;AAC3D;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS;AACnC,uBAAuB,qDAAS;AAChC,eAAe,qDAAS;AACxB,+BAA+B,uFAA0B;AACzD;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACtCkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAAM;AACtB;AACA;AACA;AACA;AACA;AACA,oBAAoB,8CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;;;;;;;;;;;;;;;AClDgD;AACzC;AACP;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8CAAM;AAC1B;AACA;AACA;AACA,gBAAgB,oDAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8CAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC7wB0C;AACe;AACJ;AACrD;AACA,kEAAkE,EAAE;AACpE,QAAQ,EAAE;AACV,kDAAkD,6DAAe;AACjE,OAAO,EAAE;AACT,kDAAkD,6DAAe;AACjE;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,EAAE;AAC3D;AACA;AACA,wCAAwC,EAAE;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8FAA8F;AAC9F;AACA;AACA,qDAAqD,EAAE,oCAAoC,EAAE;AAC7F;AACA;AACA;AACA,oDAAoD,EAAE,MAAM,EAAE;AAC9D;AACA;AACA,2CAA2C,EAAE,yBAAyB,MAAM;AAC5E,oDAAoD,KAAK,GAAG,GAAG,GAAG;AAClE;AACA;AACA;AACA,gEAAgE,kCAAkC;AAClG;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,6CAA6C;AAChF;AACA;AACA,mCAAmC,2CAA2C;AAC9E;AACA;AACA,mCAAmC,iDAAiD;AACpF;AACA;AACA;AACA,mCAAmC,8CAA8C;AACjF;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,GAAG,KAAK,GAAG;AAClC,6DAA6D,MAAM;AACnE;AACA,wEAAwE,gCAAgC;AACxG;AACA;AACA,+BAA+B,EAAE;AACjC;AACA;AACA,+BAA+B,EAAE;AACjC,0CAA0C,mCAAmC;AAC7E;AACA;AACA;AACA,8CAA8C,8BAA8B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,EAAE;AAC7D;AACA;AACA,wDAAwD,GAAG,KAAK,EAAE,aAAa,GAAG,4BAA4B,GAAG;AACjH;AACA;AACA;AACA;AACA,mCAAmC,EAAE;AACrC,mCAAmC,EAAE,gCAAgC,EAAE;AACvE;AACA;AACA;AACA,wCAAwC,EAAE;AAC1C,2DAA2D,GAAG,QAAQ,gBAAgB;AACtF;AACA,gDAAgD,GAAG;AACnD;AACA,sCAAsC,EAAE;AACxC;AACA,sCAAsC,6CAA6C;AACnF;AACA,yBAAyB,EAAE;AAC3B;AACA,qCAAqC,EAAE;AACvC;AACA,sCAAsC,6CAA6C;AACnF;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA,gCAAgC,kEAAY;AAC5C;AACA,gDAAgD,gDAAgD;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAA6C;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA,8BAA8B,sCAAsC;AACpE;AACA;AACA;AACA;AACA,sBAAsB,iCAAiC;AACvD;AACA;AACA;AACA,sBAAsB,yCAAyC,IAAI,mCAAmC;AACtG;AACA;AACA;AACA,sBAAsB,uDAAuD;AAC7E;AACA,0BAA0B,qDAAqD;AAC/E;AACA;AACA,6BAA6B,uDAAU;AACvC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,uCAAuC;AACvC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO,IAAI,EAAE,OAAO;AACjD,kBAAkB,MAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB,KAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpaoC;AACpC;AACA;AACA;AACA;AACO;AACP;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,qCAAqC;AACrC,QAAQ,iDAAS;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;AClCsE;AACrC;AACO;AACxC;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,kBAAkB,8CAAQ;AAC1B,kBAAkB,qDAAS;AAC3B;AACA;AACA,eAAe,oFAAsB;AACrC;AACA,WAAW,oFAAsB;AACjC;;;;;;;;;;;;;;;;ACnBkC;AAClC;AACA,IAAI,gDAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACM;AACP;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZyC;AACE;AACH;AACN;AACN;AACO;AACQ;AACQ;AACb;AACK;AACE;AACY;AACN;AACJ;AACY;AACb;AACK;AACD;AACO;AACL;AACC;AACE;AACD;AACA;AACK;AACA;AACD;AAChB;AACI;AAC6B;AACxC;AACA;AACoH;AACrG;AACZ;AACJ;AACL;AACQ;AACN;AACM;AACD;AACd;;;;;;;;;;;;;;;ACzCtB;AACO;;;;;;;;;;;;;;;ACDA;AACP;AACA;AACA;AACA;AACA,CAAC,4CAA4C;;;;;;;;;;;;;;;;;;;;;;;;ACL7C;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP,8CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C,mDAAmD;AACnD;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACO,uDAAuD,IAAI;AAC3D;AACP,0BAA0B;AAC1B;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpB0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,0CAA0C,oEAAgC;AAC1E;AACA;AACA;AACA,KAAK,IAAI;AACT,iBAAiB,qDAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;;;;;;;;;;;;;;;;ACP4D;AACD;AAC3D;AACA;AACA;AACA;AACA;AACA;AACO;AACP,mBAAmB;AACnB,4DAA4D,gCAAgC;AAC5F;AACA,+CAA+C,oEAAgC;AAC/E,8BAA8B,yEAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxB4D;AACD;AAC3D;AACA;AACA;AACA;AACA;AACO;AACP;AACA,4DAA4D,gCAAgC;AAC5F;AACA,+CAA+C,oEAAgC;AAC/E,8BAA8B,yEAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClBkD;AACF;AACgB;AAC5B;AACpC;AACA;AACA;AACO;AACP;AACA;AACA;AACA,YAAY,6DAAa;AACzB;AACA;AACA,YAAY,+DAAc;AAC1B;AACA;AACA,mBAAmB;AACnB;AACA,sEAAsE,qCAAqC;AAC3G;AACA,QAAQ,iDAAS;AACjB;AACA,QAAQ,iDAAS;AACjB;AACA,QAAQ,iDAAS;AACjB;AACA,QAAQ,iDAAS;AACjB;AACA;AACA,iCAAiC,6EAAqB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACzEoC;AACpC;AACA;AACA;AACA;AACA;AACO;AACP,IAAI,iDAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7CO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC3jFA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrzCsC;AACgB;AACR;AACvC,uDAAuD,IAAI;AAC3D;AACP,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mDAAQ;AAClD,6BAA6B,mDAAQ;AACrC,mBAAmB,mDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB,6BAA6B,oDAAa,CAAC,oDAAa;AACxD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO,uDAAO,aAAa;AAC3D,2CAA2C,OAAO,oDAAa,CAAC,oDAAa,+BAA+B;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,gBAAgB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO;AACP,gCAAgC;AAChC;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACpK2E;AAClB;AAClD;AACP,WAAW,sEAAa,mBAAmB,wFAAsB;AACjE;AACA,KAAK,QAAQ,gBAAgB,uBAAuB;AACpD;AAC2E;AAClB;;;;;;;;;;;ACR5C;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,iFAAiB;AAC3C,wBAAwB,mBAAO,CAAC,qFAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;ACXa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,sBAAsB;AACtB;AACA;AACA;AACA,sBAAsB;;;;;;;;;;;ACNT;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,kCAAkC;AAClC;AACA;AACA,KAAK;AACL;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gDAAgD,GAAG;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;ACnvCa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB,GAAG,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;;;;;;;;;;ACpCa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,iBAAiB;AACjB,cAAc,mBAAO,CAAC,iDAAO;AAC7B,0CAA0C,mBAAO,CAAC,6HAAqC;AACvF,2BAA2B,mBAAO,CAAC,+FAAsB;AACzD,yBAAyB,mBAAO,CAAC,0FAA4B;AAC7D,2BAA2B,mBAAO,CAAC,8FAA8B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,gBAAgB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,gBAAgB,aAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG;AACjG,oGAAoG;AACpG;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,+BAA+B;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,gBAAgB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,8BAA8B;AAC1F;AACA;AACA;AACA;AACA,8BAA8B,mDAAmD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,oIAAoI,wBAAwB;AAC5J;AACA;AACA,CAAC;AACD,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gCAAgC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8BAA8B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC3Qa;AAcE,MAAMA,UAAU,CAAC;EAC9BC,WAAWA,CAACC,GAAG,EAAE;IACf,IAAIA,GAAG,EAAE;MACP,IAAI,CAACC,KAAK,GAAG,OAAOD,GAAG,CAACC,KAAK,IAAI,QAAQ,GAAGD,GAAG,CAACC,KAAK,GAAGH,UAAU,CAACI,MAAM,CAACF,GAAG,CAACC,KAAK,CAAC;MACpF,IAAI,CAACE,IAAI,GAAG,OAAOH,GAAG,CAACG,IAAI,IAAI,QAAQ,GAAGH,GAAG,CAACG,IAAI,GAAGL,UAAU,CAACI,MAAM,CAACF,GAAG,CAACG,IAAI,CAAC;MAChF,IAAI,CAACC,IAAI,GAA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ACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACO;AACP,2BAA2B,sBAAsB;AACjD;AACA;AACA;;AAEA;AACO;AACP,gDAAgD,QAAQ;AACxD,uCAAuC,QAAQ;AAC/C,uDAAuD,QAAQ;AAC/D;AACA;AACA;;AAEO;AACP,2EAA2E,OAAO;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA,eAAe,uFAAuF,cAAc;AACpH,qBAAqB,gCAAgC,qCAAqC,2CAA2C;AACrI,0BAA0B,MAAM,iBAAiB,YAAY;AAC7D,qBAAqB;AACrB,4BAA4B;AAC5B,2BAA2B;AAC3B,0BAA0B;AAC1B;;AAEO;AACP;AACA,eAAe,6CAA6C,UAAU,sDAAsD,cAAc;AAC1I,wBAAwB,6BAA6B,oBAAoB,uCAAuC,kBAAkB;AAClI;;AAEO;AACP;AACA;AACA,yGAAyG,uFAAuF,cAAc;AAC9M,qBAAqB,8BAA8B,gDAAgD,wDAAwD;AAC3J,2CAA2C,sCAAsC,UAAU,mBAAmB,IAAI;AAClH;;AAEO;AACP,+BAA+B,uCAAuC,YAAY,KAAK,OAAO;AAC9F;AACA;;AAEA;AACA,wCAAwC,4BAA4B;AACpE,CAAC;AACD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,2CAA2C;AAC3C;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8CAA8C;AACnE;AACA;AACA,qBAAqB,aAAa;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,SAAS,gBAAgB;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;;;;;;;UCjXF;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AAM6B;AACL;AACG;AACC;AACX;AACY;AACT;AACa;AACC;AAK3B;AAQA;AAIR;AAGZ,IAAI6B,iBAAiB;AACrB,IAAI,OAAO0yB,SAAS,IAAI,WAAW,EAAE;EACnC1yB,iBAAiB,GAAG0yB,SAAS;AAC/B;AAEA,IAAIzyB,WAAW;AACf,IAAI,OAAO0yB,cAAc,IAAI,WAAW,EAAE;EACxC1yB,WAAW,GAAG0yB,cAAc;AAC9B;AAEA,IAAIC,iBAAiB;AACrB,IAAI,OAAOC,SAAS,IAAI,WAAW,EAAE;EACnCD,iBAAiB,GAAGC,SAAS;AAC/B;AAIQ;AAGRC,oBAAoB,CAAC,CAAC;AAKtB,SAASA,oBAAoBA,CAAA,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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/262.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/GetStringOrBooleanOption.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ApplyUnsignedRoundingMode.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CollapseNumberRange.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatApproximately.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRange.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRangeToParts.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/GetUnsignedRoundingMode.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberRangePattern.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/data.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/index.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/utils.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/BestAvailableLocale.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/BestFitMatcher.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeLocaleList.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupMatcher.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupSupportedLocales.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/ResolveLocale.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/UnicodeExtensionValue.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/languageMatching.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/regions.generated.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/index.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/polyfill.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/should-polyfill.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/src/cldr-segmentation-rules.generated.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/src/segmentation-utils.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/src/segmenter.js","webpack://tinode/./src/access-mode.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/config.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/drafty.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/utils.js","webpack://tinode/./version.js","webpack://tinode/./node_modules/tslib/tslib.es6.mjs","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/tinode.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, () => {\nreturn ","/**\n * https://tc39.es/ecma262/#sec-tostring\n */\nexport function ToString(o) {\n // Only symbol is irregular...\n if (typeof o === 'symbol') {\n throw TypeError('Cannot convert a Symbol value to a string');\n }\n return String(o);\n}\n/**\n * https://tc39.es/ecma262/#sec-tonumber\n * @param val\n */\nexport function ToNumber(val) {\n if (val === undefined) {\n return NaN;\n }\n if (val === null) {\n return +0;\n }\n if (typeof val === 'boolean') {\n return val ? 1 : +0;\n }\n if (typeof val === 'number') {\n return val;\n }\n if (typeof val === 'symbol' || typeof val === 'bigint') {\n throw new TypeError('Cannot convert symbol/bigint to number');\n }\n return Number(val);\n}\n/**\n * https://tc39.es/ecma262/#sec-tointeger\n * @param n\n */\nfunction ToInteger(n) {\n var number = ToNumber(n);\n if (isNaN(number) || SameValue(number, -0)) {\n return 0;\n }\n if (isFinite(number)) {\n return number;\n }\n var integer = Math.floor(Math.abs(number));\n if (number < 0) {\n integer = -integer;\n }\n if (SameValue(integer, -0)) {\n return 0;\n }\n return integer;\n}\n/**\n * https://tc39.es/ecma262/#sec-timeclip\n * @param time\n */\nexport function TimeClip(time) {\n if (!isFinite(time)) {\n return NaN;\n }\n if (Math.abs(time) > 8.64 * 1e15) {\n return NaN;\n }\n return ToInteger(time);\n}\n/**\n * https://tc39.es/ecma262/#sec-toobject\n * @param arg\n */\nexport function ToObject(arg) {\n if (arg == null) {\n throw new TypeError('undefined/null cannot be converted to object');\n }\n return Object(arg);\n}\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-samevalue\n * @param x\n * @param y\n */\nexport function SameValue(x, y) {\n if (Object.is) {\n return Object.is(x, y);\n }\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n }\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n}\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-arraycreate\n * @param len\n */\nexport function ArrayCreate(len) {\n return new Array(len);\n}\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-hasownproperty\n * @param o\n * @param prop\n */\nexport function HasOwnProperty(o, prop) {\n return Object.prototype.hasOwnProperty.call(o, prop);\n}\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-type\n * @param x\n */\nexport function Type(x) {\n if (x === null) {\n return 'Null';\n }\n if (typeof x === 'undefined') {\n return 'Undefined';\n }\n if (typeof x === 'function' || typeof x === 'object') {\n return 'Object';\n }\n if (typeof x === 'number') {\n return 'Number';\n }\n if (typeof x === 'boolean') {\n return 'Boolean';\n }\n if (typeof x === 'string') {\n return 'String';\n }\n if (typeof x === 'symbol') {\n return 'Symbol';\n }\n if (typeof x === 'bigint') {\n return 'BigInt';\n }\n}\nvar MS_PER_DAY = 86400000;\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#eqn-modulo\n * @param x\n * @param y\n * @return k of the same sign as y\n */\nfunction mod(x, y) {\n return x - Math.floor(x / y) * y;\n}\n/**\n * https://tc39.es/ecma262/#eqn-Day\n * @param t\n */\nexport function Day(t) {\n return Math.floor(t / MS_PER_DAY);\n}\n/**\n * https://tc39.es/ecma262/#sec-week-day\n * @param t\n */\nexport function WeekDay(t) {\n return mod(Day(t) + 4, 7);\n}\n/**\n * https://tc39.es/ecma262/#sec-year-number\n * @param y\n */\nexport function DayFromYear(y) {\n return Date.UTC(y, 0) / MS_PER_DAY;\n}\n/**\n * https://tc39.es/ecma262/#sec-year-number\n * @param y\n */\nexport function TimeFromYear(y) {\n return Date.UTC(y, 0);\n}\n/**\n * https://tc39.es/ecma262/#sec-year-number\n * @param t\n */\nexport function YearFromTime(t) {\n return new Date(t).getUTCFullYear();\n}\nexport function DaysInYear(y) {\n if (y % 4 !== 0) {\n return 365;\n }\n if (y % 100 !== 0) {\n return 366;\n }\n if (y % 400 !== 0) {\n return 365;\n }\n return 366;\n}\nexport function DayWithinYear(t) {\n return Day(t) - DayFromYear(YearFromTime(t));\n}\nexport function InLeapYear(t) {\n return DaysInYear(YearFromTime(t)) === 365 ? 0 : 1;\n}\n/**\n * https://tc39.es/ecma262/#sec-month-number\n * @param t\n */\nexport function MonthFromTime(t) {\n var dwy = DayWithinYear(t);\n var leap = InLeapYear(t);\n if (dwy >= 0 && dwy < 31) {\n return 0;\n }\n if (dwy < 59 + leap) {\n return 1;\n }\n if (dwy < 90 + leap) {\n return 2;\n }\n if (dwy < 120 + leap) {\n return 3;\n }\n if (dwy < 151 + leap) {\n return 4;\n }\n if (dwy < 181 + leap) {\n return 5;\n }\n if (dwy < 212 + leap) {\n return 6;\n }\n if (dwy < 243 + leap) {\n return 7;\n }\n if (dwy < 273 + leap) {\n return 8;\n }\n if (dwy < 304 + leap) {\n return 9;\n }\n if (dwy < 334 + leap) {\n return 10;\n }\n if (dwy < 365 + leap) {\n return 11;\n }\n throw new Error('Invalid time');\n}\nexport function DateFromTime(t) {\n var dwy = DayWithinYear(t);\n var mft = MonthFromTime(t);\n var leap = InLeapYear(t);\n if (mft === 0) {\n return dwy + 1;\n }\n if (mft === 1) {\n return dwy - 30;\n }\n if (mft === 2) {\n return dwy - 58 - leap;\n }\n if (mft === 3) {\n return dwy - 89 - leap;\n }\n if (mft === 4) {\n return dwy - 119 - leap;\n }\n if (mft === 5) {\n return dwy - 150 - leap;\n }\n if (mft === 6) {\n return dwy - 180 - leap;\n }\n if (mft === 7) {\n return dwy - 211 - leap;\n }\n if (mft === 8) {\n return dwy - 242 - leap;\n }\n if (mft === 9) {\n return dwy - 272 - leap;\n }\n if (mft === 10) {\n return dwy - 303 - leap;\n }\n if (mft === 11) {\n return dwy - 333 - leap;\n }\n throw new Error('Invalid time');\n}\nvar HOURS_PER_DAY = 24;\nvar MINUTES_PER_HOUR = 60;\nvar SECONDS_PER_MINUTE = 60;\nvar MS_PER_SECOND = 1e3;\nvar MS_PER_MINUTE = MS_PER_SECOND * SECONDS_PER_MINUTE;\nvar MS_PER_HOUR = MS_PER_MINUTE * MINUTES_PER_HOUR;\nexport function HourFromTime(t) {\n return mod(Math.floor(t / MS_PER_HOUR), HOURS_PER_DAY);\n}\nexport function MinFromTime(t) {\n return mod(Math.floor(t / MS_PER_MINUTE), MINUTES_PER_HOUR);\n}\nexport function SecFromTime(t) {\n return mod(Math.floor(t / MS_PER_SECOND), SECONDS_PER_MINUTE);\n}\nfunction IsCallable(fn) {\n return typeof fn === 'function';\n}\n/**\n * The abstract operation OrdinaryHasInstance implements\n * the default algorithm for determining if an object O\n * inherits from the instance object inheritance path\n * provided by constructor C.\n * @param C class\n * @param O object\n * @param internalSlots internalSlots\n */\nexport function OrdinaryHasInstance(C, O, internalSlots) {\n if (!IsCallable(C)) {\n return false;\n }\n if (internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction) {\n var BC = internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction;\n return O instanceof BC;\n }\n if (typeof O !== 'object') {\n return false;\n }\n var P = C.prototype;\n if (typeof P !== 'object') {\n throw new TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');\n }\n return Object.prototype.isPrototypeOf.call(P, O);\n}\nexport function msFromTime(t) {\n return mod(t, MS_PER_SECOND);\n}\n","/**\n * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist\n * @param locales\n */\nexport function CanonicalizeLocaleList(locales) {\n // TODO\n return Intl.getCanonicalLocales(locales);\n}\n","/**\n * https://tc39.es/ecma402/#sec-canonicalizetimezonename\n * @param tz\n */\nexport function CanonicalizeTimeZoneName(tz, _a) {\n var zoneNames = _a.zoneNames, uppercaseLinks = _a.uppercaseLinks;\n var uppercasedTz = tz.toUpperCase();\n var uppercasedZones = zoneNames.reduce(function (all, z) {\n all[z.toUpperCase()] = z;\n return all;\n }, {});\n var ianaTimeZone = uppercaseLinks[uppercasedTz] || uppercasedZones[uppercasedTz];\n if (ianaTimeZone === 'Etc/UTC' || ianaTimeZone === 'Etc/GMT') {\n return 'UTC';\n }\n return ianaTimeZone;\n}\n","import { ToObject } from './262';\n/**\n * https://tc39.es/ecma402/#sec-coerceoptionstoobject\n * @param options\n * @returns\n */\nexport function CoerceOptionsToObject(options) {\n if (typeof options === 'undefined') {\n return Object.create(null);\n }\n return ToObject(options);\n}\n","/**\n * https://tc39.es/ecma402/#sec-defaultnumberoption\n * @param val\n * @param min\n * @param max\n * @param fallback\n */\nexport function DefaultNumberOption(inputVal, min, max, fallback) {\n if (inputVal === undefined) {\n // @ts-expect-error\n return fallback;\n }\n var val = Number(inputVal);\n if (isNaN(val) || val < min || val > max) {\n throw new RangeError(\"\".concat(val, \" is outside of range [\").concat(min, \", \").concat(max, \"]\"));\n }\n return Math.floor(val);\n}\n","/**\n * https://tc39.es/ecma402/#sec-getnumberoption\n * @param options\n * @param property\n * @param min\n * @param max\n * @param fallback\n */\nimport { DefaultNumberOption } from './DefaultNumberOption';\nexport function GetNumberOption(options, property, minimum, maximum, fallback) {\n var val = options[property];\n return DefaultNumberOption(val, minimum, maximum, fallback);\n}\n","import { ToString } from './262';\n/**\n * https://tc39.es/ecma402/#sec-getoption\n * @param opts\n * @param prop\n * @param type\n * @param values\n * @param fallback\n */\nexport function GetOption(opts, prop, type, values, fallback) {\n if (typeof opts !== 'object') {\n throw new TypeError('Options must be an object');\n }\n var value = opts[prop];\n if (value !== undefined) {\n if (type !== 'boolean' && type !== 'string') {\n throw new TypeError('invalid type');\n }\n if (type === 'boolean') {\n value = Boolean(value);\n }\n if (type === 'string') {\n value = ToString(value);\n }\n if (values !== undefined && !values.filter(function (val) { return val == value; }).length) {\n throw new RangeError(\"\".concat(value, \" is not within \").concat(values.join(', ')));\n }\n return value;\n }\n return fallback;\n}\n","/**\n * https://tc39.es/ecma402/#sec-getoptionsobject\n * @param options\n * @returns\n */\nexport function GetOptionsObject(options) {\n if (typeof options === 'undefined') {\n return Object.create(null);\n }\n if (typeof options === 'object') {\n return options;\n }\n throw new TypeError('Options must be an object');\n}\n","/**\n * https://tc39.es/ecma402/#sec-getstringorbooleanoption\n * @param opts\n * @param prop\n * @param values\n * @param trueValue\n * @param falsyValue\n * @param fallback\n */\nimport { ToString } from './262';\nexport function GetStringOrBooleanOption(opts, prop, values, trueValue, falsyValue, fallback) {\n var value = opts[prop];\n if (value === undefined) {\n return fallback;\n }\n if (value === true) {\n return trueValue;\n }\n var valueBoolean = Boolean(value);\n if (valueBoolean === false) {\n return falsyValue;\n }\n value = ToString(value);\n if (value === 'true' || value === 'false') {\n return fallback;\n }\n if ((values || []).indexOf(value) === -1) {\n throw new RangeError(\"Invalid value \".concat(value));\n }\n return value;\n}\n","/**\n * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers\n */\nexport var SANCTIONED_UNITS = [\n 'angle-degree',\n 'area-acre',\n 'area-hectare',\n 'concentr-percent',\n 'digital-bit',\n 'digital-byte',\n 'digital-gigabit',\n 'digital-gigabyte',\n 'digital-kilobit',\n 'digital-kilobyte',\n 'digital-megabit',\n 'digital-megabyte',\n 'digital-petabyte',\n 'digital-terabit',\n 'digital-terabyte',\n 'duration-day',\n 'duration-hour',\n 'duration-millisecond',\n 'duration-minute',\n 'duration-month',\n 'duration-second',\n 'duration-week',\n 'duration-year',\n 'length-centimeter',\n 'length-foot',\n 'length-inch',\n 'length-kilometer',\n 'length-meter',\n 'length-mile-scandinavian',\n 'length-mile',\n 'length-millimeter',\n 'length-yard',\n 'mass-gram',\n 'mass-kilogram',\n 'mass-ounce',\n 'mass-pound',\n 'mass-stone',\n 'temperature-celsius',\n 'temperature-fahrenheit',\n 'volume-fluid-ounce',\n 'volume-gallon',\n 'volume-liter',\n 'volume-milliliter',\n];\n// In CLDR, the unit name always follows the form `namespace-unit` pattern.\n// For example: `digital-bit` instead of `bit`. This function removes the namespace prefix.\nexport function removeUnitNamespace(unit) {\n return unit.slice(unit.indexOf('-') + 1);\n}\n/**\n * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers\n */\nexport var SIMPLE_UNITS = SANCTIONED_UNITS.map(removeUnitNamespace);\n/**\n * https://tc39.es/ecma402/#sec-issanctionedsimpleunitidentifier\n */\nexport function IsSanctionedSimpleUnitIdentifier(unitIdentifier) {\n return SIMPLE_UNITS.indexOf(unitIdentifier) > -1;\n}\n","/**\n * https://tc39.es/ecma402/#sec-isvalidtimezonename\n * @param tz\n * @param implDetails implementation details\n */\nexport function IsValidTimeZoneName(tz, _a) {\n var zoneNamesFromData = _a.zoneNamesFromData, uppercaseLinks = _a.uppercaseLinks;\n var uppercasedTz = tz.toUpperCase();\n var zoneNames = new Set();\n var linkNames = new Set();\n zoneNamesFromData.map(function (z) { return z.toUpperCase(); }).forEach(function (z) { return zoneNames.add(z); });\n Object.keys(uppercaseLinks).forEach(function (linkName) {\n linkNames.add(linkName.toUpperCase());\n zoneNames.add(uppercaseLinks[linkName].toUpperCase());\n });\n return zoneNames.has(uppercasedTz) || linkNames.has(uppercasedTz);\n}\n","/**\n * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping\n * @param str string to convert\n */\nfunction toUpperCase(str) {\n return str.replace(/([a-z])/g, function (_, c) { return c.toUpperCase(); });\n}\nvar NOT_A_Z_REGEX = /[^A-Z]/;\n/**\n * https://tc39.es/ecma402/#sec-iswellformedcurrencycode\n */\nexport function IsWellFormedCurrencyCode(currency) {\n currency = toUpperCase(currency);\n if (currency.length !== 3) {\n return false;\n }\n if (NOT_A_Z_REGEX.test(currency)) {\n return false;\n }\n return true;\n}\n","import { IsSanctionedSimpleUnitIdentifier } from './IsSanctionedSimpleUnitIdentifier';\n/**\n * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping\n * @param str string to convert\n */\nfunction toLowerCase(str) {\n return str.replace(/([A-Z])/g, function (_, c) { return c.toLowerCase(); });\n}\n/**\n * https://tc39.es/ecma402/#sec-iswellformedunitidentifier\n * @param unit\n */\nexport function IsWellFormedUnitIdentifier(unit) {\n unit = toLowerCase(unit);\n if (IsSanctionedSimpleUnitIdentifier(unit)) {\n return true;\n }\n var units = unit.split('-per-');\n if (units.length !== 2) {\n return false;\n }\n var numerator = units[0], denominator = units[1];\n if (!IsSanctionedSimpleUnitIdentifier(numerator) ||\n !IsSanctionedSimpleUnitIdentifier(denominator)) {\n return false;\n }\n return true;\n}\n","export function ApplyUnsignedRoundingMode(x, r1, r2, unsignedRoundingMode) {\n if (x === r1)\n return r1;\n if (unsignedRoundingMode === undefined) {\n throw new Error('unsignedRoundingMode is mandatory');\n }\n if (unsignedRoundingMode === 'zero') {\n return r1;\n }\n if (unsignedRoundingMode === 'infinity') {\n return r2;\n }\n var d1 = x - r1;\n var d2 = r2 - x;\n if (d1 < d2) {\n return r1;\n }\n if (d2 < d1) {\n return r2;\n }\n if (d1 !== d2) {\n throw new Error('Unexpected error');\n }\n if (unsignedRoundingMode === 'half-zero') {\n return r1;\n }\n if (unsignedRoundingMode === 'half-infinity') {\n return r2;\n }\n if (unsignedRoundingMode !== 'half-even') {\n throw new Error(\"Unexpected value for unsignedRoundingMode: \".concat(unsignedRoundingMode));\n }\n var cardinality = (r1 / (r2 - r1)) % 2;\n if (cardinality === 0) {\n return r1;\n }\n return r2;\n}\n","/**\n * https://tc39.es/ecma402/#sec-collapsenumberrange\n */\nexport function CollapseNumberRange(result) {\n return result;\n}\n","import { getMagnitude } from '../utils';\nimport { ComputeExponentForMagnitude } from './ComputeExponentForMagnitude';\nimport { FormatNumericToString } from './FormatNumericToString';\n/**\n * The abstract operation ComputeExponent computes an exponent (power of ten) by which to scale x\n * according to the number formatting settings. It handles cases such as 999 rounding up to 1000,\n * requiring a different exponent.\n *\n * NOT IN SPEC: it returns [exponent, magnitude].\n */\nexport function ComputeExponent(numberFormat, x, _a) {\n var getInternalSlots = _a.getInternalSlots;\n if (x === 0) {\n return [0, 0];\n }\n if (x < 0) {\n x = -x;\n }\n var magnitude = getMagnitude(x);\n var exponent = ComputeExponentForMagnitude(numberFormat, magnitude, {\n getInternalSlots: getInternalSlots,\n });\n // Preserve more precision by doing multiplication when exponent is negative.\n x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent);\n var formatNumberResult = FormatNumericToString(getInternalSlots(numberFormat), x);\n if (formatNumberResult.roundedNumber === 0) {\n return [exponent, magnitude];\n }\n var newMagnitude = getMagnitude(formatNumberResult.roundedNumber);\n if (newMagnitude === magnitude - exponent) {\n return [exponent, magnitude];\n }\n return [\n ComputeExponentForMagnitude(numberFormat, magnitude + 1, {\n getInternalSlots: getInternalSlots,\n }),\n magnitude + 1,\n ];\n}\n","/**\n * The abstract operation ComputeExponentForMagnitude computes an exponent by which to scale a\n * number of the given magnitude (power of ten of the most significant digit) according to the\n * locale and the desired notation (scientific, engineering, or compact).\n */\nexport function ComputeExponentForMagnitude(numberFormat, magnitude, _a) {\n var getInternalSlots = _a.getInternalSlots;\n var internalSlots = getInternalSlots(numberFormat);\n var notation = internalSlots.notation, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;\n switch (notation) {\n case 'standard':\n return 0;\n case 'scientific':\n return magnitude;\n case 'engineering':\n return Math.floor(magnitude / 3) * 3;\n default: {\n // Let exponent be an implementation- and locale-dependent (ILD) integer by which to scale a\n // number of the given magnitude in compact notation for the current locale.\n var compactDisplay = internalSlots.compactDisplay, style = internalSlots.style, currencyDisplay = internalSlots.currencyDisplay;\n var thresholdMap = void 0;\n if (style === 'currency' && currencyDisplay !== 'name') {\n var currency = dataLocaleData.numbers.currency[numberingSystem] ||\n dataLocaleData.numbers.currency[dataLocaleData.numbers.nu[0]];\n thresholdMap = currency.short;\n }\n else {\n var decimal = dataLocaleData.numbers.decimal[numberingSystem] ||\n dataLocaleData.numbers.decimal[dataLocaleData.numbers.nu[0]];\n thresholdMap = compactDisplay === 'long' ? decimal.long : decimal.short;\n }\n if (!thresholdMap) {\n return 0;\n }\n var num = String(Math.pow(10, magnitude));\n var thresholds = Object.keys(thresholdMap); // TODO: this can be pre-processed\n if (num < thresholds[0]) {\n return 0;\n }\n if (num > thresholds[thresholds.length - 1]) {\n return thresholds[thresholds.length - 1].length - 1;\n }\n var i = thresholds.indexOf(num);\n if (i === -1) {\n return 0;\n }\n // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats\n // Special handling if the pattern is precisely `0`.\n var magnitudeKey = thresholds[i];\n // TODO: do we need to handle plural here?\n var compactPattern = thresholdMap[magnitudeKey].other;\n if (compactPattern === '0') {\n return 0;\n }\n // Example: in zh-TW, `10000000` maps to `0000萬`. So we need to return 8 - 4 = 4 here.\n return (magnitudeKey.length -\n thresholdMap[magnitudeKey].other.match(/0+/)[0].length);\n }\n }\n}\n","import { HasOwnProperty } from '../262';\n/**\n * https://tc39.es/ecma402/#sec-currencydigits\n */\nexport function CurrencyDigits(c, _a) {\n var currencyDigitsData = _a.currencyDigitsData;\n return HasOwnProperty(currencyDigitsData, c)\n ? currencyDigitsData[c]\n : 2;\n}\n","/**\n * https://tc39.es/ecma402/#sec-formatapproximately\n */\nexport function FormatApproximately(numberFormat, result, _a) {\n var getInternalSlots = _a.getInternalSlots;\n var internalSlots = getInternalSlots(numberFormat);\n var symbols = internalSlots.dataLocaleData.numbers.symbols[internalSlots.numberingSystem];\n var approximatelySign = symbols.approximatelySign;\n result.push({ type: 'approximatelySign', value: approximatelySign });\n return result;\n}\n","import { PartitionNumberRangePattern } from './PartitionNumberRangePattern';\n/**\n * https://tc39.es/ecma402/#sec-formatnumericrange\n */\nexport function FormatNumericRange(numberFormat, x, y, _a) {\n var getInternalSlots = _a.getInternalSlots;\n var parts = PartitionNumberRangePattern(numberFormat, x, y, {\n getInternalSlots: getInternalSlots,\n });\n return parts.map(function (part) { return part.value; }).join('');\n}\n","import { PartitionNumberRangePattern } from './PartitionNumberRangePattern';\n/**\n * https://tc39.es/ecma402/#sec-formatnumericrangetoparts\n */\nexport function FormatNumericRangeToParts(numberFormat, x, y, _a) {\n var getInternalSlots = _a.getInternalSlots;\n var parts = PartitionNumberRangePattern(numberFormat, x, y, {\n getInternalSlots: getInternalSlots,\n });\n return parts.map(function (part, index) { return ({\n type: part.type,\n value: part.value,\n source: part.source,\n result: index.toString(),\n }); });\n}\n","import { PartitionNumberPattern } from './PartitionNumberPattern';\nimport { ArrayCreate } from '../262';\nexport function FormatNumericToParts(nf, x, implDetails) {\n var parts = PartitionNumberPattern(nf, x, implDetails);\n var result = ArrayCreate(0);\n for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\n var part = parts_1[_i];\n result.push({\n type: part.type,\n value: part.value,\n });\n }\n return result;\n}\n","import { SameValue } from '../262';\nimport { ToRawPrecision } from './ToRawPrecision';\nimport { repeat } from '../utils';\nimport { ToRawFixed } from './ToRawFixed';\n/**\n * https://tc39.es/ecma402/#sec-formatnumberstring\n */\nexport function FormatNumericToString(intlObject, x) {\n var isNegative = x < 0 || SameValue(x, -0);\n if (isNegative) {\n x = -x;\n }\n var result;\n var rourndingType = intlObject.roundingType;\n switch (rourndingType) {\n case 'significantDigits':\n result = ToRawPrecision(x, intlObject.minimumSignificantDigits, intlObject.maximumSignificantDigits);\n break;\n case 'fractionDigits':\n result = ToRawFixed(x, intlObject.minimumFractionDigits, intlObject.maximumFractionDigits);\n break;\n default:\n result = ToRawPrecision(x, 1, 2);\n if (result.integerDigitsCount > 1) {\n result = ToRawFixed(x, 0, 0);\n }\n break;\n }\n x = result.roundedNumber;\n var string = result.formattedString;\n var int = result.integerDigitsCount;\n var minInteger = intlObject.minimumIntegerDigits;\n if (int < minInteger) {\n var forwardZeros = repeat('0', minInteger - int);\n string = forwardZeros + string;\n }\n if (isNegative) {\n x = -x;\n }\n return { roundedNumber: x, formattedString: string };\n}\n","var negativeMapping = {\n ceil: 'zero',\n floor: 'infinity',\n expand: 'infinity',\n trunc: 'zero',\n halfCeil: 'half-zero',\n halfFloor: 'half-infinity',\n halfExpand: 'half-infinity',\n halfTrunc: 'half-zero',\n halfEven: 'half-even',\n};\nvar positiveMapping = {\n ceil: 'infinity',\n floor: 'zero',\n expand: 'infinity',\n trunc: 'zero',\n halfCeil: 'half-infinity',\n halfFloor: 'half-zero',\n halfExpand: 'half-infinity',\n halfTrunc: 'half-zero',\n halfEven: 'half-even',\n};\nexport function GetUnsignedRoundingMode(roundingMode, isNegative) {\n if (isNegative) {\n return negativeMapping[roundingMode];\n }\n return positiveMapping[roundingMode];\n}\n","import { ResolveLocale } from '@formatjs/intl-localematcher';\nimport { CanonicalizeLocaleList } from '../CanonicalizeLocaleList';\nimport { CoerceOptionsToObject } from '../CoerceOptionsToObject';\nimport { GetNumberOption } from '../GetNumberOption';\nimport { GetOption } from '../GetOption';\nimport { GetStringOrBooleanOption } from '../GetStringOrBooleanOption';\nimport { invariant } from '../utils';\nimport { CurrencyDigits } from './CurrencyDigits';\nimport { SetNumberFormatDigitOptions } from './SetNumberFormatDigitOptions';\nimport { SetNumberFormatUnitOptions } from './SetNumberFormatUnitOptions';\nvar VALID_ROUND_INCREMENT_VALUES = [\n 1, 2, 5, 10, 20, 25, 50, 100, 200, 250, 500, 1000, 2000,\n];\n/**\n * https://tc39.es/ecma402/#sec-initializenumberformat\n */\nexport function InitializeNumberFormat(nf, locales, opts, _a) {\n var getInternalSlots = _a.getInternalSlots, localeData = _a.localeData, availableLocales = _a.availableLocales, numberingSystemNames = _a.numberingSystemNames, getDefaultLocale = _a.getDefaultLocale, currencyDigitsData = _a.currencyDigitsData;\n // @ts-ignore\n var requestedLocales = CanonicalizeLocaleList(locales);\n var options = CoerceOptionsToObject(opts);\n var opt = Object.create(null);\n var matcher = GetOption(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');\n opt.localeMatcher = matcher;\n var numberingSystem = GetOption(options, 'numberingSystem', 'string', undefined, undefined);\n if (numberingSystem !== undefined &&\n numberingSystemNames.indexOf(numberingSystem) < 0) {\n // 8.a. If numberingSystem does not match the Unicode Locale Identifier type nonterminal,\n // throw a RangeError exception.\n throw RangeError(\"Invalid numberingSystems: \".concat(numberingSystem));\n }\n opt.nu = numberingSystem;\n var r = ResolveLocale(Array.from(availableLocales), requestedLocales, opt, \n // [[RelevantExtensionKeys]] slot, which is a constant\n ['nu'], localeData, getDefaultLocale);\n var dataLocaleData = localeData[r.dataLocale];\n invariant(!!dataLocaleData, \"Missing locale data for \".concat(r.dataLocale));\n var internalSlots = getInternalSlots(nf);\n internalSlots.locale = r.locale;\n internalSlots.dataLocale = r.dataLocale;\n internalSlots.numberingSystem = r.nu;\n internalSlots.dataLocaleData = dataLocaleData;\n SetNumberFormatUnitOptions(nf, options, { getInternalSlots: getInternalSlots });\n var style = internalSlots.style;\n var mnfdDefault;\n var mxfdDefault;\n if (style === 'currency') {\n var currency = internalSlots.currency;\n var cDigits = CurrencyDigits(currency, { currencyDigitsData: currencyDigitsData });\n mnfdDefault = cDigits;\n mxfdDefault = cDigits;\n }\n else {\n mnfdDefault = 0;\n mxfdDefault = style === 'percent' ? 0 : 3;\n }\n var notation = GetOption(options, 'notation', 'string', ['standard', 'scientific', 'engineering', 'compact'], 'standard');\n internalSlots.notation = notation;\n SetNumberFormatDigitOptions(internalSlots, options, mnfdDefault, mxfdDefault, notation);\n var roundingIncrement = GetNumberOption(options, 'roundingIncrement', 1, 5000, 1);\n if (VALID_ROUND_INCREMENT_VALUES.indexOf(roundingIncrement) === -1) {\n throw new RangeError(\"Invalid rounding increment value: \".concat(roundingIncrement, \".\\nValid values are \").concat(VALID_ROUND_INCREMENT_VALUES, \".\"));\n }\n if (roundingIncrement !== 1 &&\n internalSlots.roundingType !== 'fractionDigits') {\n throw new TypeError(\"For roundingIncrement > 1 only fractionDigits is a valid roundingType\");\n }\n if (roundingIncrement !== 1 &&\n internalSlots.maximumFractionDigits !== internalSlots.minimumFractionDigits) {\n throw new RangeError('With roundingIncrement > 1, maximumFractionDigits and minimumFractionDigits must be equal.');\n }\n internalSlots.roundingIncrement = roundingIncrement;\n var trailingZeroDisplay = GetOption(options, 'trailingZeroDisplay', 'string', ['auto', 'stripIfInteger'], 'auto');\n internalSlots.trailingZeroDisplay = trailingZeroDisplay;\n var compactDisplay = GetOption(options, 'compactDisplay', 'string', ['short', 'long'], 'short');\n var defaultUseGrouping = 'auto';\n if (notation === 'compact') {\n internalSlots.compactDisplay = compactDisplay;\n defaultUseGrouping = 'min2';\n }\n internalSlots.useGrouping = GetStringOrBooleanOption(options, 'useGrouping', ['min2', 'auto', 'always'], 'always', false, defaultUseGrouping);\n internalSlots.signDisplay = GetOption(options, 'signDisplay', 'string', ['auto', 'never', 'always', 'exceptZero', 'negative'], 'auto');\n internalSlots.roundingMode = GetOption(options, 'roundingMode', 'string', [\n 'ceil',\n 'floor',\n 'expand',\n 'trunc',\n 'halfCeil',\n 'halfFloor',\n 'halfExpand',\n 'halfTrunc',\n 'halfEven',\n ], 'halfExpand');\n return nf;\n}\n","import { FormatNumericToString } from './FormatNumericToString';\nimport { SameValue } from '../262';\nimport { ComputeExponent } from './ComputeExponent';\nimport formatToParts from './format_to_parts';\n/**\n * https://tc39.es/ecma402/#sec-formatnumberstring\n */\nexport function PartitionNumberPattern(numberFormat, x, _a) {\n var _b;\n var getInternalSlots = _a.getInternalSlots;\n var internalSlots = getInternalSlots(numberFormat);\n var pl = internalSlots.pl, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;\n var symbols = dataLocaleData.numbers.symbols[numberingSystem] ||\n dataLocaleData.numbers.symbols[dataLocaleData.numbers.nu[0]];\n var magnitude = 0;\n var exponent = 0;\n var n;\n if (isNaN(x)) {\n n = symbols.nan;\n }\n else if (x == Number.POSITIVE_INFINITY || x == Number.NEGATIVE_INFINITY) {\n n = symbols.infinity;\n }\n else {\n if (!SameValue(x, -0)) {\n if (!isFinite(x)) {\n throw new Error('Input must be a mathematical value');\n }\n if (internalSlots.style == 'percent') {\n x *= 100;\n }\n ;\n _b = ComputeExponent(numberFormat, x, {\n getInternalSlots: getInternalSlots,\n }), exponent = _b[0], magnitude = _b[1];\n // Preserve more precision by doing multiplication when exponent is negative.\n x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent);\n }\n var formatNumberResult = FormatNumericToString(internalSlots, x);\n n = formatNumberResult.formattedString;\n x = formatNumberResult.roundedNumber;\n }\n // Based on https://tc39.es/ecma402/#sec-getnumberformatpattern\n // We need to do this before `x` is rounded.\n var sign;\n var signDisplay = internalSlots.signDisplay;\n switch (signDisplay) {\n case 'never':\n sign = 0;\n break;\n case 'auto':\n if (SameValue(x, 0) || x > 0 || isNaN(x)) {\n sign = 0;\n }\n else {\n sign = -1;\n }\n break;\n case 'always':\n if (SameValue(x, 0) || x > 0 || isNaN(x)) {\n sign = 1;\n }\n else {\n sign = -1;\n }\n break;\n default:\n // x === 0 -> x is 0 or x is -0\n if (x === 0 || isNaN(x)) {\n sign = 0;\n }\n else if (x > 0) {\n sign = 1;\n }\n else {\n sign = -1;\n }\n }\n return formatToParts({ roundedNumber: x, formattedString: n, exponent: exponent, magnitude: magnitude, sign: sign }, internalSlots.dataLocaleData, pl, internalSlots);\n}\n","import { PartitionNumberPattern } from './PartitionNumberPattern';\nimport { CollapseNumberRange } from './CollapseNumberRange';\nimport { FormatApproximately } from './FormatApproximately';\n/**\n * https://tc39.es/ecma402/#sec-partitionnumberrangepattern\n */\nexport function PartitionNumberRangePattern(numberFormat, x, y, _a) {\n var getInternalSlots = _a.getInternalSlots;\n if (isNaN(x) || isNaN(y)) {\n throw new RangeError('Input must be a number');\n }\n var result = [];\n var xResult = PartitionNumberPattern(numberFormat, x, { getInternalSlots: getInternalSlots });\n var yResult = PartitionNumberPattern(numberFormat, y, { getInternalSlots: getInternalSlots });\n if (xResult === yResult) {\n return FormatApproximately(numberFormat, xResult, { getInternalSlots: getInternalSlots });\n }\n for (var _i = 0, xResult_1 = xResult; _i < xResult_1.length; _i++) {\n var r = xResult_1[_i];\n r.source = 'startRange';\n }\n result = result.concat(xResult);\n var internalSlots = getInternalSlots(numberFormat);\n var symbols = internalSlots.dataLocaleData.numbers.symbols[internalSlots.numberingSystem];\n result.push({ type: 'literal', value: symbols.rangeSign, source: 'shared' });\n for (var _b = 0, yResult_1 = yResult; _b < yResult_1.length; _b++) {\n var r = yResult_1[_b];\n r.source = 'endRange';\n }\n result = result.concat(yResult);\n return CollapseNumberRange(result);\n}\n","import { DefaultNumberOption } from '../DefaultNumberOption';\nimport { GetNumberOption } from '../GetNumberOption';\nimport { GetOption } from '../GetOption';\n/**\n * https://tc39.es/ecma402/#sec-setnfdigitoptions\n */\nexport function SetNumberFormatDigitOptions(internalSlots, opts, mnfdDefault, mxfdDefault, notation) {\n var mnid = GetNumberOption(opts, 'minimumIntegerDigits', 1, 21, 1);\n var mnfd = opts.minimumFractionDigits;\n var mxfd = opts.maximumFractionDigits;\n var mnsd = opts.minimumSignificantDigits;\n var mxsd = opts.maximumSignificantDigits;\n internalSlots.minimumIntegerDigits = mnid;\n var roundingPriority = GetOption(opts, 'roundingPriority', 'string', ['auto', 'morePrecision', 'lessPrecision'], 'auto');\n var hasSd = mnsd !== undefined || mxsd !== undefined;\n var hasFd = mnfd !== undefined || mxfd !== undefined;\n var needSd = true;\n var needFd = true;\n if (roundingPriority === 'auto') {\n needSd = hasSd;\n if (hasSd || (!hasFd && notation === 'compact')) {\n needFd = false;\n }\n }\n if (needSd) {\n if (hasSd) {\n mnsd = DefaultNumberOption(mnsd, 1, 21, 1);\n mxsd = DefaultNumberOption(mxsd, mnsd, 21, 21);\n internalSlots.minimumSignificantDigits = mnsd;\n internalSlots.maximumSignificantDigits = mxsd;\n }\n else {\n internalSlots.minimumSignificantDigits = 1;\n internalSlots.maximumSignificantDigits = 21;\n }\n }\n if (needFd) {\n if (hasFd) {\n mnfd = DefaultNumberOption(mnfd, 0, 20, undefined);\n mxfd = DefaultNumberOption(mxfd, 0, 20, undefined);\n if (mnfd === undefined) {\n // @ts-expect-error\n mnfd = Math.min(mnfdDefault, mxfd);\n }\n else if (mxfd === undefined) {\n mxfd = Math.max(mxfdDefault, mnfd);\n }\n else if (mnfd > mxfd) {\n throw new RangeError(\"Invalid range, \".concat(mnfd, \" > \").concat(mxfd));\n }\n internalSlots.minimumFractionDigits = mnfd;\n internalSlots.maximumFractionDigits = mxfd;\n }\n else {\n internalSlots.minimumFractionDigits = mnfdDefault;\n internalSlots.maximumFractionDigits = mxfdDefault;\n }\n }\n if (needSd || needFd) {\n if (roundingPriority === 'morePrecision') {\n internalSlots.roundingType = 'morePrecision';\n }\n else if (roundingPriority === 'lessPrecision') {\n internalSlots.roundingType = 'lessPrecision';\n }\n else if (hasSd) {\n internalSlots.roundingType = 'significantDigits';\n }\n else {\n internalSlots.roundingType = 'fractionDigits';\n }\n }\n else {\n internalSlots.roundingType = 'morePrecision';\n internalSlots.minimumFractionDigits = 0;\n internalSlots.maximumFractionDigits = 0;\n internalSlots.minimumSignificantDigits = 1;\n internalSlots.maximumSignificantDigits = 2;\n }\n}\n","import { GetOption } from '../GetOption';\nimport { IsWellFormedCurrencyCode } from '../IsWellFormedCurrencyCode';\nimport { IsWellFormedUnitIdentifier } from '../IsWellFormedUnitIdentifier';\n/**\n * https://tc39.es/ecma402/#sec-setnumberformatunitoptions\n */\nexport function SetNumberFormatUnitOptions(nf, options, _a) {\n if (options === void 0) { options = Object.create(null); }\n var getInternalSlots = _a.getInternalSlots;\n var internalSlots = getInternalSlots(nf);\n var style = GetOption(options, 'style', 'string', ['decimal', 'percent', 'currency', 'unit'], 'decimal');\n internalSlots.style = style;\n var currency = GetOption(options, 'currency', 'string', undefined, undefined);\n if (currency !== undefined && !IsWellFormedCurrencyCode(currency)) {\n throw RangeError('Malformed currency code');\n }\n if (style === 'currency' && currency === undefined) {\n throw TypeError('currency cannot be undefined');\n }\n var currencyDisplay = GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'narrowSymbol', 'name'], 'symbol');\n var currencySign = GetOption(options, 'currencySign', 'string', ['standard', 'accounting'], 'standard');\n var unit = GetOption(options, 'unit', 'string', undefined, undefined);\n if (unit !== undefined && !IsWellFormedUnitIdentifier(unit)) {\n throw RangeError('Invalid unit argument for Intl.NumberFormat()');\n }\n if (style === 'unit' && unit === undefined) {\n throw TypeError('unit cannot be undefined');\n }\n var unitDisplay = GetOption(options, 'unitDisplay', 'string', ['short', 'narrow', 'long'], 'short');\n if (style === 'currency') {\n internalSlots.currency = currency.toUpperCase();\n internalSlots.currencyDisplay = currencyDisplay;\n internalSlots.currencySign = currencySign;\n }\n if (style === 'unit') {\n internalSlots.unit = unit;\n internalSlots.unitDisplay = unitDisplay;\n }\n}\n","import { repeat } from '../utils';\n/**\n * TODO: dedup with intl-pluralrules and support BigInt\n * https://tc39.es/ecma402/#sec-torawfixed\n * @param x a finite non-negative Number or BigInt\n * @param minFraction and integer between 0 and 20\n * @param maxFraction and integer between 0 and 20\n */\nexport function ToRawFixed(x, minFraction, maxFraction) {\n var f = maxFraction;\n var n = Math.round(x * Math.pow(10, f));\n var xFinal = n / Math.pow(10, f);\n // n is a positive integer, but it is possible to be greater than 1e21.\n // In such case we will go the slow path.\n // See also: https://tc39.es/ecma262/#sec-numeric-types-number-tostring\n var m;\n if (n < 1e21) {\n m = n.toString();\n }\n else {\n m = n.toString();\n var _a = m.split('e'), mantissa = _a[0], exponent = _a[1];\n m = mantissa.replace('.', '');\n m = m + repeat('0', Math.max(+exponent - m.length + 1, 0));\n }\n var int;\n if (f !== 0) {\n var k = m.length;\n if (k <= f) {\n var z = repeat('0', f + 1 - k);\n m = z + m;\n k = f + 1;\n }\n var a = m.slice(0, k - f);\n var b = m.slice(k - f);\n m = \"\".concat(a, \".\").concat(b);\n int = a.length;\n }\n else {\n int = m.length;\n }\n var cut = maxFraction - minFraction;\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, -1);\n cut--;\n }\n if (m[m.length - 1] === '.') {\n m = m.slice(0, -1);\n }\n return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int };\n}\n","import { repeat, getMagnitude } from '../utils';\nexport function ToRawPrecision(x, minPrecision, maxPrecision) {\n var p = maxPrecision;\n var m;\n var e;\n var xFinal;\n if (x === 0) {\n m = repeat('0', p);\n e = 0;\n xFinal = 0;\n }\n else {\n var xToString = x.toString();\n // If xToString is formatted as scientific notation, the number is either very small or very\n // large. If the precision of the formatted string is lower that requested max precision, we\n // should still infer them from the formatted string, otherwise the formatted result might have\n // precision loss (e.g. 1e41 will not have 0 in every trailing digits).\n var xToStringExponentIndex = xToString.indexOf('e');\n var _a = xToString.split('e'), xToStringMantissa = _a[0], xToStringExponent = _a[1];\n var xToStringMantissaWithoutDecimalPoint = xToStringMantissa.replace('.', '');\n if (xToStringExponentIndex >= 0 &&\n xToStringMantissaWithoutDecimalPoint.length <= p) {\n e = +xToStringExponent;\n m =\n xToStringMantissaWithoutDecimalPoint +\n repeat('0', p - xToStringMantissaWithoutDecimalPoint.length);\n xFinal = x;\n }\n else {\n e = getMagnitude(x);\n var decimalPlaceOffset = e - p + 1;\n // n is the integer containing the required precision digits. To derive the formatted string,\n // we will adjust its decimal place in the logic below.\n var n = Math.round(adjustDecimalPlace(x, decimalPlaceOffset));\n // The rounding caused the change of magnitude, so we should increment `e` by 1.\n if (adjustDecimalPlace(n, p - 1) >= 10) {\n e = e + 1;\n // Divide n by 10 to swallow one precision.\n n = Math.floor(n / 10);\n }\n m = n.toString();\n // Equivalent of n * 10 ** (e - p + 1)\n xFinal = adjustDecimalPlace(n, p - 1 - e);\n }\n }\n var int;\n if (e >= p - 1) {\n m = m + repeat('0', e - p + 1);\n int = e + 1;\n }\n else if (e >= 0) {\n m = \"\".concat(m.slice(0, e + 1), \".\").concat(m.slice(e + 1));\n int = e + 1;\n }\n else {\n m = \"0.\".concat(repeat('0', -e - 1)).concat(m);\n int = 1;\n }\n if (m.indexOf('.') >= 0 && maxPrecision > minPrecision) {\n var cut = maxPrecision - minPrecision;\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, -1);\n cut--;\n }\n if (m[m.length - 1] === '.') {\n m = m.slice(0, -1);\n }\n }\n return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int };\n // x / (10 ** magnitude), but try to preserve as much floating point precision as possible.\n function adjustDecimalPlace(x, magnitude) {\n return magnitude < 0 ? x * Math.pow(10, -magnitude) : x / Math.pow(10, magnitude);\n }\n}\n","export var digitMapping = {\n \"adlm\": [\n \"𞥐\",\n \"𞥑\",\n \"𞥒\",\n \"𞥓\",\n \"𞥔\",\n \"𞥕\",\n \"𞥖\",\n \"𞥗\",\n \"𞥘\",\n \"𞥙\"\n ],\n \"ahom\": [\n \"𑜰\",\n \"𑜱\",\n \"𑜲\",\n \"𑜳\",\n \"𑜴\",\n \"𑜵\",\n \"𑜶\",\n \"𑜷\",\n \"𑜸\",\n \"𑜹\"\n ],\n \"arab\": [\n \"٠\",\n \"١\",\n \"٢\",\n \"٣\",\n \"٤\",\n \"٥\",\n \"٦\",\n \"٧\",\n \"٨\",\n \"٩\"\n ],\n \"arabext\": [\n \"۰\",\n \"۱\",\n \"۲\",\n \"۳\",\n \"۴\",\n \"۵\",\n \"۶\",\n \"۷\",\n \"۸\",\n \"۹\"\n ],\n \"bali\": [\n \"᭐\",\n \"᭑\",\n \"᭒\",\n \"᭓\",\n \"᭔\",\n \"᭕\",\n \"᭖\",\n \"᭗\",\n \"᭘\",\n \"᭙\"\n ],\n \"beng\": [\n \"০\",\n \"১\",\n \"২\",\n \"৩\",\n \"৪\",\n \"৫\",\n \"৬\",\n \"৭\",\n \"৮\",\n \"৯\"\n ],\n \"bhks\": [\n \"𑱐\",\n \"𑱑\",\n \"𑱒\",\n \"𑱓\",\n \"𑱔\",\n \"𑱕\",\n \"𑱖\",\n \"𑱗\",\n \"𑱘\",\n \"𑱙\"\n ],\n \"brah\": [\n \"𑁦\",\n \"𑁧\",\n \"𑁨\",\n \"𑁩\",\n \"𑁪\",\n \"𑁫\",\n \"𑁬\",\n \"𑁭\",\n \"𑁮\",\n \"𑁯\"\n ],\n \"cakm\": [\n \"𑄶\",\n \"𑄷\",\n \"𑄸\",\n \"𑄹\",\n \"𑄺\",\n \"𑄻\",\n \"𑄼\",\n \"𑄽\",\n \"𑄾\",\n \"𑄿\"\n ],\n \"cham\": [\n \"꩐\",\n \"꩑\",\n \"꩒\",\n \"꩓\",\n \"꩔\",\n \"꩕\",\n \"꩖\",\n \"꩗\",\n \"꩘\",\n \"꩙\"\n ],\n \"deva\": [\n \"०\",\n \"१\",\n \"२\",\n \"३\",\n \"४\",\n \"५\",\n \"६\",\n \"७\",\n \"८\",\n \"९\"\n ],\n \"diak\": [\n \"𑥐\",\n \"𑥑\",\n \"𑥒\",\n \"𑥓\",\n \"𑥔\",\n \"𑥕\",\n \"𑥖\",\n \"𑥗\",\n \"𑥘\",\n \"𑥙\"\n ],\n \"fullwide\": [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\"\n ],\n \"gong\": [\n \"𑶠\",\n \"𑶡\",\n \"𑶢\",\n \"𑶣\",\n \"𑶤\",\n \"𑶥\",\n \"𑶦\",\n \"𑶧\",\n \"𑶨\",\n \"𑶩\"\n ],\n \"gonm\": [\n \"𑵐\",\n \"𑵑\",\n \"𑵒\",\n \"𑵓\",\n \"𑵔\",\n \"𑵕\",\n \"𑵖\",\n \"𑵗\",\n \"𑵘\",\n \"𑵙\"\n ],\n \"gujr\": [\n \"૦\",\n \"૧\",\n \"૨\",\n \"૩\",\n \"૪\",\n \"૫\",\n \"૬\",\n \"૭\",\n \"૮\",\n \"૯\"\n ],\n \"guru\": [\n \"੦\",\n \"੧\",\n \"੨\",\n \"੩\",\n \"੪\",\n \"੫\",\n \"੬\",\n \"੭\",\n \"੮\",\n \"੯\"\n ],\n \"hanidec\": [\n \"〇\",\n \"一\",\n \"二\",\n \"三\",\n \"四\",\n \"五\",\n \"六\",\n \"七\",\n \"八\",\n \"九\"\n ],\n \"hmng\": [\n \"𖭐\",\n \"𖭑\",\n \"𖭒\",\n \"𖭓\",\n \"𖭔\",\n \"𖭕\",\n \"𖭖\",\n \"𖭗\",\n \"𖭘\",\n \"𖭙\"\n ],\n \"hmnp\": [\n \"𞅀\",\n \"𞅁\",\n \"𞅂\",\n \"𞅃\",\n \"𞅄\",\n \"𞅅\",\n \"𞅆\",\n \"𞅇\",\n \"𞅈\",\n \"𞅉\"\n ],\n \"java\": [\n \"꧐\",\n \"꧑\",\n \"꧒\",\n \"꧓\",\n \"꧔\",\n \"꧕\",\n \"꧖\",\n \"꧗\",\n \"꧘\",\n \"꧙\"\n ],\n \"kali\": [\n \"꤀\",\n \"꤁\",\n \"꤂\",\n \"꤃\",\n \"꤄\",\n \"꤅\",\n \"꤆\",\n \"꤇\",\n \"꤈\",\n \"꤉\"\n ],\n \"khmr\": [\n \"០\",\n \"១\",\n \"២\",\n \"៣\",\n \"៤\",\n \"៥\",\n \"៦\",\n \"៧\",\n \"៨\",\n \"៩\"\n ],\n \"knda\": [\n \"೦\",\n \"೧\",\n \"೨\",\n \"೩\",\n \"೪\",\n \"೫\",\n \"೬\",\n \"೭\",\n \"೮\",\n \"೯\"\n ],\n \"lana\": [\n \"᪀\",\n \"᪁\",\n \"᪂\",\n \"᪃\",\n \"᪄\",\n \"᪅\",\n \"᪆\",\n \"᪇\",\n \"᪈\",\n \"᪉\"\n ],\n \"lanatham\": [\n \"᪐\",\n \"᪑\",\n \"᪒\",\n \"᪓\",\n \"᪔\",\n \"᪕\",\n \"᪖\",\n \"᪗\",\n \"᪘\",\n \"᪙\"\n ],\n \"laoo\": [\n \"໐\",\n \"໑\",\n \"໒\",\n \"໓\",\n \"໔\",\n \"໕\",\n \"໖\",\n \"໗\",\n \"໘\",\n \"໙\"\n ],\n \"lepc\": [\n \"᪐\",\n \"᪑\",\n \"᪒\",\n \"᪓\",\n \"᪔\",\n \"᪕\",\n \"᪖\",\n \"᪗\",\n \"᪘\",\n \"᪙\"\n ],\n \"limb\": [\n \"᥆\",\n \"᥇\",\n \"᥈\",\n \"᥉\",\n \"᥊\",\n \"᥋\",\n \"᥌\",\n \"᥍\",\n \"᥎\",\n \"᥏\"\n ],\n \"mathbold\": [\n \"𝟎\",\n \"𝟏\",\n \"𝟐\",\n \"𝟑\",\n \"𝟒\",\n \"𝟓\",\n \"𝟔\",\n \"𝟕\",\n \"𝟖\",\n \"𝟗\"\n ],\n \"mathdbl\": [\n \"𝟘\",\n \"𝟙\",\n \"𝟚\",\n \"𝟛\",\n \"𝟜\",\n \"𝟝\",\n \"𝟞\",\n \"𝟟\",\n \"𝟠\",\n \"𝟡\"\n ],\n \"mathmono\": [\n \"𝟶\",\n \"𝟷\",\n \"𝟸\",\n \"𝟹\",\n \"𝟺\",\n \"𝟻\",\n \"𝟼\",\n \"𝟽\",\n \"𝟾\",\n \"𝟿\"\n ],\n \"mathsanb\": [\n \"𝟬\",\n \"𝟭\",\n \"𝟮\",\n \"𝟯\",\n \"𝟰\",\n \"𝟱\",\n \"𝟲\",\n \"𝟳\",\n \"𝟴\",\n \"𝟵\"\n ],\n \"mathsans\": [\n \"𝟢\",\n \"𝟣\",\n \"𝟤\",\n \"𝟥\",\n \"𝟦\",\n \"𝟧\",\n \"𝟨\",\n \"𝟩\",\n \"𝟪\",\n \"𝟫\"\n ],\n \"mlym\": [\n \"൦\",\n \"൧\",\n \"൨\",\n \"൩\",\n \"൪\",\n \"൫\",\n \"൬\",\n \"൭\",\n \"൮\",\n \"൯\"\n ],\n \"modi\": [\n \"𑙐\",\n \"𑙑\",\n \"𑙒\",\n \"𑙓\",\n \"𑙔\",\n \"𑙕\",\n \"𑙖\",\n \"𑙗\",\n \"𑙘\",\n \"𑙙\"\n ],\n \"mong\": [\n \"᠐\",\n \"᠑\",\n \"᠒\",\n \"᠓\",\n \"᠔\",\n \"᠕\",\n \"᠖\",\n \"᠗\",\n \"᠘\",\n \"᠙\"\n ],\n \"mroo\": [\n \"𖩠\",\n \"𖩡\",\n \"𖩢\",\n \"𖩣\",\n \"𖩤\",\n \"𖩥\",\n \"𖩦\",\n \"𖩧\",\n \"𖩨\",\n \"𖩩\"\n ],\n \"mtei\": [\n \"꯰\",\n \"꯱\",\n \"꯲\",\n \"꯳\",\n \"꯴\",\n \"꯵\",\n \"꯶\",\n \"꯷\",\n \"꯸\",\n \"꯹\"\n ],\n \"mymr\": [\n \"၀\",\n \"၁\",\n \"၂\",\n \"၃\",\n \"၄\",\n \"၅\",\n \"၆\",\n \"၇\",\n \"၈\",\n \"၉\"\n ],\n \"mymrshan\": [\n \"႐\",\n \"႑\",\n \"႒\",\n \"႓\",\n \"႔\",\n \"႕\",\n \"႖\",\n \"႗\",\n \"႘\",\n \"႙\"\n ],\n \"mymrtlng\": [\n \"꧰\",\n \"꧱\",\n \"꧲\",\n \"꧳\",\n \"꧴\",\n \"꧵\",\n \"꧶\",\n \"꧷\",\n \"꧸\",\n \"꧹\"\n ],\n \"newa\": [\n \"𑑐\",\n \"𑑑\",\n \"𑑒\",\n \"𑑓\",\n \"𑑔\",\n \"𑑕\",\n \"𑑖\",\n \"𑑗\",\n \"𑑘\",\n \"𑑙\"\n ],\n \"nkoo\": [\n \"߀\",\n \"߁\",\n \"߂\",\n \"߃\",\n \"߄\",\n \"߅\",\n \"߆\",\n \"߇\",\n \"߈\",\n \"߉\"\n ],\n \"olck\": [\n \"᱐\",\n \"᱑\",\n \"᱒\",\n \"᱓\",\n \"᱔\",\n \"᱕\",\n \"᱖\",\n \"᱗\",\n \"᱘\",\n \"᱙\"\n ],\n \"orya\": [\n \"୦\",\n \"୧\",\n \"୨\",\n \"୩\",\n \"୪\",\n \"୫\",\n \"୬\",\n \"୭\",\n \"୮\",\n \"୯\"\n ],\n \"osma\": [\n \"𐒠\",\n \"𐒡\",\n \"𐒢\",\n \"𐒣\",\n \"𐒤\",\n \"𐒥\",\n \"𐒦\",\n \"𐒧\",\n \"𐒨\",\n \"𐒩\"\n ],\n \"rohg\": [\n \"𐴰\",\n \"𐴱\",\n \"𐴲\",\n \"𐴳\",\n \"𐴴\",\n \"𐴵\",\n \"𐴶\",\n \"𐴷\",\n \"𐴸\",\n \"𐴹\"\n ],\n \"saur\": [\n \"꣐\",\n \"꣑\",\n \"꣒\",\n \"꣓\",\n \"꣔\",\n \"꣕\",\n \"꣖\",\n \"꣗\",\n \"꣘\",\n \"꣙\"\n ],\n \"segment\": [\n \"🯰\",\n \"🯱\",\n \"🯲\",\n \"🯳\",\n \"🯴\",\n \"🯵\",\n \"🯶\",\n \"🯷\",\n \"🯸\",\n \"🯹\"\n ],\n \"shrd\": [\n \"𑇐\",\n \"𑇑\",\n \"𑇒\",\n \"𑇓\",\n \"𑇔\",\n \"𑇕\",\n \"𑇖\",\n \"𑇗\",\n \"𑇘\",\n \"𑇙\"\n ],\n \"sind\": [\n \"𑋰\",\n \"𑋱\",\n \"𑋲\",\n \"𑋳\",\n \"𑋴\",\n \"𑋵\",\n \"𑋶\",\n \"𑋷\",\n \"𑋸\",\n \"𑋹\"\n ],\n \"sinh\": [\n \"෦\",\n \"෧\",\n \"෨\",\n \"෩\",\n \"෪\",\n \"෫\",\n \"෬\",\n \"෭\",\n \"෮\",\n \"෯\"\n ],\n \"sora\": [\n \"𑃰\",\n \"𑃱\",\n \"𑃲\",\n \"𑃳\",\n \"𑃴\",\n \"𑃵\",\n \"𑃶\",\n \"𑃷\",\n \"𑃸\",\n \"𑃹\"\n ],\n \"sund\": [\n \"᮰\",\n \"᮱\",\n \"᮲\",\n \"᮳\",\n \"᮴\",\n \"᮵\",\n \"᮶\",\n \"᮷\",\n \"᮸\",\n \"᮹\"\n ],\n \"takr\": [\n \"𑛀\",\n \"𑛁\",\n \"𑛂\",\n \"𑛃\",\n \"𑛄\",\n \"𑛅\",\n \"𑛆\",\n \"𑛇\",\n \"𑛈\",\n \"𑛉\"\n ],\n \"talu\": [\n \"᧐\",\n \"᧑\",\n \"᧒\",\n \"᧓\",\n \"᧔\",\n \"᧕\",\n \"᧖\",\n \"᧗\",\n \"᧘\",\n \"᧙\"\n ],\n \"tamldec\": [\n \"௦\",\n \"௧\",\n \"௨\",\n \"௩\",\n \"௪\",\n \"௫\",\n \"௬\",\n \"௭\",\n \"௮\",\n \"௯\"\n ],\n \"telu\": [\n \"౦\",\n \"౧\",\n \"౨\",\n \"౩\",\n \"౪\",\n \"౫\",\n \"౬\",\n \"౭\",\n \"౮\",\n \"౯\"\n ],\n \"thai\": [\n \"๐\",\n \"๑\",\n \"๒\",\n \"๓\",\n \"๔\",\n \"๕\",\n \"๖\",\n \"๗\",\n \"๘\",\n \"๙\"\n ],\n \"tibt\": [\n \"༠\",\n \"༡\",\n \"༢\",\n \"༣\",\n \"༤\",\n \"༥\",\n \"༦\",\n \"༧\",\n \"༨\",\n \"༩\"\n ],\n \"tirh\": [\n \"𑓐\",\n \"𑓑\",\n \"𑓒\",\n \"𑓓\",\n \"𑓔\",\n \"𑓕\",\n \"𑓖\",\n \"𑓗\",\n \"𑓘\",\n \"𑓙\"\n ],\n \"vaii\": [\n \"ᘠ\",\n \"ᘡ\",\n \"ᘢ\",\n \"ᘣ\",\n \"ᘤ\",\n \"ᘥ\",\n \"ᘦ\",\n \"ᘧ\",\n \"ᘨ\",\n \"ᘩ\"\n ],\n \"wara\": [\n \"𑣠\",\n \"𑣡\",\n \"𑣢\",\n \"𑣣\",\n \"𑣤\",\n \"𑣥\",\n \"𑣦\",\n \"𑣧\",\n \"𑣨\",\n \"𑣩\"\n ],\n \"wcho\": [\n \"𞋰\",\n \"𞋱\",\n \"𞋲\",\n \"𞋳\",\n \"𞋴\",\n \"𞋵\",\n \"𞋶\",\n \"𞋷\",\n \"𞋸\",\n \"𞋹\"\n ]\n};\n","import { ToRawFixed } from './ToRawFixed';\nimport { digitMapping } from './digit-mapping.generated';\nimport { S_UNICODE_REGEX } from '../regex.generated';\n// This is from: unicode-12.1.0/General_Category/Symbol/regex.js\n// IE11 does not support unicode flag, otherwise this is just /\\p{S}/u.\n// /^\\p{S}/u\nvar CARET_S_UNICODE_REGEX = new RegExp(\"^\".concat(S_UNICODE_REGEX.source));\n// /\\p{S}$/u\nvar S_DOLLAR_UNICODE_REGEX = new RegExp(\"\".concat(S_UNICODE_REGEX.source, \"$\"));\nvar CLDR_NUMBER_PATTERN = /[#0](?:[\\.,][#0]+)*/g;\nexport default function formatToParts(numberResult, data, pl, options) {\n var sign = numberResult.sign, exponent = numberResult.exponent, magnitude = numberResult.magnitude;\n var notation = options.notation, style = options.style, numberingSystem = options.numberingSystem;\n var defaultNumberingSystem = data.numbers.nu[0];\n // #region Part 1: partition and interpolate the CLDR number pattern.\n // ----------------------------------------------------------\n var compactNumberPattern = null;\n if (notation === 'compact' && magnitude) {\n compactNumberPattern = getCompactDisplayPattern(numberResult, pl, data, style, options.compactDisplay, options.currencyDisplay, numberingSystem);\n }\n // This is used multiple times\n var nonNameCurrencyPart;\n if (style === 'currency' && options.currencyDisplay !== 'name') {\n var byCurrencyDisplay = data.currencies[options.currency];\n if (byCurrencyDisplay) {\n switch (options.currencyDisplay) {\n case 'code':\n nonNameCurrencyPart = options.currency;\n break;\n case 'symbol':\n nonNameCurrencyPart = byCurrencyDisplay.symbol;\n break;\n default:\n nonNameCurrencyPart = byCurrencyDisplay.narrow;\n break;\n }\n }\n else {\n // Fallback for unknown currency\n nonNameCurrencyPart = options.currency;\n }\n }\n var numberPattern;\n if (!compactNumberPattern) {\n // Note: if the style is unit, or is currency and the currency display is name,\n // its unit parts will be interpolated in part 2. So here we can fallback to decimal.\n if (style === 'decimal' ||\n style === 'unit' ||\n (style === 'currency' && options.currencyDisplay === 'name')) {\n // Shortcut for decimal\n var decimalData = data.numbers.decimal[numberingSystem] ||\n data.numbers.decimal[defaultNumberingSystem];\n numberPattern = getPatternForSign(decimalData.standard, sign);\n }\n else if (style === 'currency') {\n var currencyData = data.numbers.currency[numberingSystem] ||\n data.numbers.currency[defaultNumberingSystem];\n // We replace number pattern part with `0` for easier postprocessing.\n numberPattern = getPatternForSign(currencyData[options.currencySign], sign);\n }\n else {\n // percent\n var percentPattern = data.numbers.percent[numberingSystem] ||\n data.numbers.percent[defaultNumberingSystem];\n numberPattern = getPatternForSign(percentPattern, sign);\n }\n }\n else {\n numberPattern = compactNumberPattern;\n }\n // Extract the decimal number pattern string. It looks like \"#,##0,00\", which will later be\n // used to infer decimal group sizes.\n var decimalNumberPattern = CLDR_NUMBER_PATTERN.exec(numberPattern)[0];\n // Now we start to substitute patterns\n // 1. replace strings like `0` and `#,##0.00` with `{0}`\n // 2. unquote characters (invariant: the quoted characters does not contain the special tokens)\n numberPattern = numberPattern\n .replace(CLDR_NUMBER_PATTERN, '{0}')\n .replace(/'(.)'/g, '$1');\n // Handle currency spacing (both compact and non-compact).\n if (style === 'currency' && options.currencyDisplay !== 'name') {\n var currencyData = data.numbers.currency[numberingSystem] ||\n data.numbers.currency[defaultNumberingSystem];\n // See `currencySpacing` substitution rule in TR-35.\n // Here we always assume the currencyMatch is \"[:^S:]\" and surroundingMatch is \"[:digit:]\".\n //\n // Example 1: for pattern \"#,##0.00¤\" with symbol \"US$\", we replace \"¤\" with the symbol,\n // but insert an extra non-break space before the symbol, because \"[:^S:]\" matches \"U\" in\n // \"US$\" and \"[:digit:]\" matches the latn numbering system digits.\n //\n // Example 2: for pattern \"¤#,##0.00\" with symbol \"US$\", there is no spacing between symbol\n // and number, because `$` does not match \"[:^S:]\".\n //\n // Implementation note: here we do the best effort to infer the insertion.\n // We also assume that `beforeInsertBetween` and `afterInsertBetween` will never be `;`.\n var afterCurrency = currencyData.currencySpacing.afterInsertBetween;\n if (afterCurrency && !S_DOLLAR_UNICODE_REGEX.test(nonNameCurrencyPart)) {\n numberPattern = numberPattern.replace('¤{0}', \"\\u00A4\".concat(afterCurrency, \"{0}\"));\n }\n var beforeCurrency = currencyData.currencySpacing.beforeInsertBetween;\n if (beforeCurrency && !CARET_S_UNICODE_REGEX.test(nonNameCurrencyPart)) {\n numberPattern = numberPattern.replace('{0}¤', \"{0}\".concat(beforeCurrency, \"\\u00A4\"));\n }\n }\n // The following tokens are special: `{0}`, `¤`, `%`, `-`, `+`, `{c:...}.\n var numberPatternParts = numberPattern.split(/({c:[^}]+}|\\{0\\}|[¤%\\-\\+])/g);\n var numberParts = [];\n var symbols = data.numbers.symbols[numberingSystem] ||\n data.numbers.symbols[defaultNumberingSystem];\n for (var _i = 0, numberPatternParts_1 = numberPatternParts; _i < numberPatternParts_1.length; _i++) {\n var part = numberPatternParts_1[_i];\n if (!part) {\n continue;\n }\n switch (part) {\n case '{0}': {\n // We only need to handle scientific and engineering notation here.\n numberParts.push.apply(numberParts, paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem, \n // If compact number pattern exists, do not insert group separators.\n !compactNumberPattern && Boolean(options.useGrouping), decimalNumberPattern));\n break;\n }\n case '-':\n numberParts.push({ type: 'minusSign', value: symbols.minusSign });\n break;\n case '+':\n numberParts.push({ type: 'plusSign', value: symbols.plusSign });\n break;\n case '%':\n numberParts.push({ type: 'percentSign', value: symbols.percentSign });\n break;\n case '¤':\n // Computed above when handling currency spacing.\n numberParts.push({ type: 'currency', value: nonNameCurrencyPart });\n break;\n default:\n if (/^\\{c:/.test(part)) {\n numberParts.push({\n type: 'compact',\n value: part.substring(3, part.length - 1),\n });\n }\n else {\n // literal\n numberParts.push({ type: 'literal', value: part });\n }\n break;\n }\n }\n // #endregion\n // #region Part 2: interpolate unit pattern if necessary.\n // ----------------------------------------------\n switch (style) {\n case 'currency': {\n // `currencyDisplay: 'name'` has similar pattern handling as units.\n if (options.currencyDisplay === 'name') {\n var unitPattern = (data.numbers.currency[numberingSystem] ||\n data.numbers.currency[defaultNumberingSystem]).unitPattern;\n // Select plural\n var unitName = void 0;\n var currencyNameData = data.currencies[options.currency];\n if (currencyNameData) {\n unitName = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), currencyNameData.displayName);\n }\n else {\n // Fallback for unknown currency\n unitName = options.currency;\n }\n // Do {0} and {1} substitution\n var unitPatternParts = unitPattern.split(/(\\{[01]\\})/g);\n var result = [];\n for (var _a = 0, unitPatternParts_1 = unitPatternParts; _a < unitPatternParts_1.length; _a++) {\n var part = unitPatternParts_1[_a];\n switch (part) {\n case '{0}':\n result.push.apply(result, numberParts);\n break;\n case '{1}':\n result.push({ type: 'currency', value: unitName });\n break;\n default:\n if (part) {\n result.push({ type: 'literal', value: part });\n }\n break;\n }\n }\n return result;\n }\n else {\n return numberParts;\n }\n }\n case 'unit': {\n var unit = options.unit, unitDisplay = options.unitDisplay;\n var unitData = data.units.simple[unit];\n var unitPattern = void 0;\n if (unitData) {\n // Simple unit pattern\n unitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[unit][unitDisplay]);\n }\n else {\n // See: http://unicode.org/reports/tr35/tr35-general.html#perUnitPatterns\n // If cannot find unit in the simple pattern, it must be \"per\" compound pattern.\n // Implementation note: we are not following TR-35 here because we need to format to parts!\n var _b = unit.split('-per-'), numeratorUnit = _b[0], denominatorUnit = _b[1];\n unitData = data.units.simple[numeratorUnit];\n var numeratorUnitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[numeratorUnit][unitDisplay]);\n var perUnitPattern = data.units.simple[denominatorUnit].perUnit[unitDisplay];\n if (perUnitPattern) {\n // perUnitPattern exists, combine it with numeratorUnitPattern\n unitPattern = perUnitPattern.replace('{0}', numeratorUnitPattern);\n }\n else {\n // get compoundUnit pattern (e.g. \"{0} per {1}\"), repalce {0} with numerator pattern and {1} with\n // the denominator pattern in singular form.\n var perPattern = data.units.compound.per[unitDisplay];\n var denominatorPattern = selectPlural(pl, 1, data.units.simple[denominatorUnit][unitDisplay]);\n unitPattern = unitPattern = perPattern\n .replace('{0}', numeratorUnitPattern)\n .replace('{1}', denominatorPattern.replace('{0}', ''));\n }\n }\n var result = [];\n // We need spacing around \"{0}\" because they are not treated as \"unit\" parts, but \"literal\".\n for (var _c = 0, _d = unitPattern.split(/(\\s*\\{0\\}\\s*)/); _c < _d.length; _c++) {\n var part = _d[_c];\n var interpolateMatch = /^(\\s*)\\{0\\}(\\s*)$/.exec(part);\n if (interpolateMatch) {\n // Space before \"{0}\"\n if (interpolateMatch[1]) {\n result.push({ type: 'literal', value: interpolateMatch[1] });\n }\n // \"{0}\" itself\n result.push.apply(result, numberParts);\n // Space after \"{0}\"\n if (interpolateMatch[2]) {\n result.push({ type: 'literal', value: interpolateMatch[2] });\n }\n }\n else if (part) {\n result.push({ type: 'unit', value: part });\n }\n }\n return result;\n }\n default:\n return numberParts;\n }\n // #endregion\n}\n// A subset of https://tc39.es/ecma402/#sec-partitionnotationsubpattern\n// Plus the exponent parts handling.\nfunction paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem, useGrouping, \n/**\n * This is the decimal number pattern without signs or symbols.\n * It is used to infer the group size when `useGrouping` is true.\n *\n * A typical value looks like \"#,##0.00\" (primary group size is 3).\n * Some locales like Hindi has secondary group size of 2 (e.g. \"#,##,##0.00\").\n */\ndecimalNumberPattern) {\n var result = [];\n // eslint-disable-next-line prefer-const\n var n = numberResult.formattedString, x = numberResult.roundedNumber;\n if (isNaN(x)) {\n return [{ type: 'nan', value: n }];\n }\n else if (!isFinite(x)) {\n return [{ type: 'infinity', value: n }];\n }\n var digitReplacementTable = digitMapping[numberingSystem];\n if (digitReplacementTable) {\n n = n.replace(/\\d/g, function (digit) { return digitReplacementTable[+digit] || digit; });\n }\n // TODO: Else use an implementation dependent algorithm to map n to the appropriate\n // representation of n in the given numbering system.\n var decimalSepIndex = n.indexOf('.');\n var integer;\n var fraction;\n if (decimalSepIndex > 0) {\n integer = n.slice(0, decimalSepIndex);\n fraction = n.slice(decimalSepIndex + 1);\n }\n else {\n integer = n;\n }\n // #region Grouping integer digits\n // The weird compact and x >= 10000 check is to ensure consistency with Node.js and Chrome.\n // Note that `de` does not have compact form for thousands, but Node.js does not insert grouping separator\n // unless the rounded number is greater than 10000:\n // NumberFormat('de', {notation: 'compact', compactDisplay: 'short'}).format(1234) //=> \"1234\"\n // NumberFormat('de').format(1234) //=> \"1.234\"\n if (useGrouping && (notation !== 'compact' || x >= 10000)) {\n var groupSepSymbol = symbols.group;\n var groups = [];\n // > There may be two different grouping sizes: The primary grouping size used for the least\n // > significant integer group, and the secondary grouping size used for more significant groups.\n // > If a pattern contains multiple grouping separators, the interval between the last one and the\n // > end of the integer defines the primary grouping size, and the interval between the last two\n // > defines the secondary grouping size. All others are ignored.\n var integerNumberPattern = decimalNumberPattern.split('.')[0];\n var patternGroups = integerNumberPattern.split(',');\n var primaryGroupingSize = 3;\n var secondaryGroupingSize = 3;\n if (patternGroups.length > 1) {\n primaryGroupingSize = patternGroups[patternGroups.length - 1].length;\n }\n if (patternGroups.length > 2) {\n secondaryGroupingSize = patternGroups[patternGroups.length - 2].length;\n }\n var i = integer.length - primaryGroupingSize;\n if (i > 0) {\n // Slice the least significant integer group\n groups.push(integer.slice(i, i + primaryGroupingSize));\n // Then iteratively push the more signicant groups\n // TODO: handle surrogate pairs in some numbering system digits\n for (i -= secondaryGroupingSize; i > 0; i -= secondaryGroupingSize) {\n groups.push(integer.slice(i, i + secondaryGroupingSize));\n }\n groups.push(integer.slice(0, i + secondaryGroupingSize));\n }\n else {\n groups.push(integer);\n }\n while (groups.length > 0) {\n var integerGroup = groups.pop();\n result.push({ type: 'integer', value: integerGroup });\n if (groups.length > 0) {\n result.push({ type: 'group', value: groupSepSymbol });\n }\n }\n }\n else {\n result.push({ type: 'integer', value: integer });\n }\n // #endregion\n if (fraction !== undefined) {\n result.push({ type: 'decimal', value: symbols.decimal }, { type: 'fraction', value: fraction });\n }\n if ((notation === 'scientific' || notation === 'engineering') &&\n isFinite(x)) {\n result.push({ type: 'exponentSeparator', value: symbols.exponential });\n if (exponent < 0) {\n result.push({ type: 'exponentMinusSign', value: symbols.minusSign });\n exponent = -exponent;\n }\n var exponentResult = ToRawFixed(exponent, 0, 0);\n result.push({\n type: 'exponentInteger',\n value: exponentResult.formattedString,\n });\n }\n return result;\n}\nfunction getPatternForSign(pattern, sign) {\n if (pattern.indexOf(';') < 0) {\n pattern = \"\".concat(pattern, \";-\").concat(pattern);\n }\n var _a = pattern.split(';'), zeroPattern = _a[0], negativePattern = _a[1];\n switch (sign) {\n case 0:\n return zeroPattern;\n case -1:\n return negativePattern;\n default:\n return negativePattern.indexOf('-') >= 0\n ? negativePattern.replace(/-/g, '+')\n : \"+\".concat(zeroPattern);\n }\n}\n// Find the CLDR pattern for compact notation based on the magnitude of data and style.\n//\n// Example return value: \"¤ {c:laki}000;¤{c:laki} -0\" (`sw` locale):\n// - Notice the `{c:...}` token that wraps the compact literal.\n// - The consecutive zeros are normalized to single zero to match CLDR_NUMBER_PATTERN.\n//\n// Returning null means the compact display pattern cannot be found.\nfunction getCompactDisplayPattern(numberResult, pl, data, style, compactDisplay, currencyDisplay, numberingSystem) {\n var _a;\n var roundedNumber = numberResult.roundedNumber, sign = numberResult.sign, magnitude = numberResult.magnitude;\n var magnitudeKey = String(Math.pow(10, magnitude));\n var defaultNumberingSystem = data.numbers.nu[0];\n var pattern;\n if (style === 'currency' && currencyDisplay !== 'name') {\n var byNumberingSystem = data.numbers.currency;\n var currencyData = byNumberingSystem[numberingSystem] ||\n byNumberingSystem[defaultNumberingSystem];\n // NOTE: compact notation ignores currencySign!\n var compactPluralRules = (_a = currencyData.short) === null || _a === void 0 ? void 0 : _a[magnitudeKey];\n if (!compactPluralRules) {\n return null;\n }\n pattern = selectPlural(pl, roundedNumber, compactPluralRules);\n }\n else {\n var byNumberingSystem = data.numbers.decimal;\n var byCompactDisplay = byNumberingSystem[numberingSystem] ||\n byNumberingSystem[defaultNumberingSystem];\n var compactPlaralRule = byCompactDisplay[compactDisplay][magnitudeKey];\n if (!compactPlaralRule) {\n return null;\n }\n pattern = selectPlural(pl, roundedNumber, compactPlaralRule);\n }\n // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats\n // > If the value is precisely “0”, either explicit or defaulted, then the normal number format\n // > pattern for that sort of object is supplied.\n if (pattern === '0') {\n return null;\n }\n pattern = getPatternForSign(pattern, sign)\n // Extract compact literal from the pattern\n .replace(/([^\\s;\\-\\+\\d¤]+)/g, '{c:$1}')\n // We replace one or more zeros with a single zero so it matches `CLDR_NUMBER_PATTERN`.\n .replace(/0+/, '0');\n return pattern;\n}\nfunction selectPlural(pl, x, rules) {\n return rules[pl.select(x)] || rules.other;\n}\n","import { invariant } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-partitionpattern\n * @param pattern\n */\nexport function PartitionPattern(pattern) {\n var result = [];\n var beginIndex = pattern.indexOf('{');\n var endIndex = 0;\n var nextIndex = 0;\n var length = pattern.length;\n while (beginIndex < pattern.length && beginIndex > -1) {\n endIndex = pattern.indexOf('}', beginIndex);\n invariant(endIndex > beginIndex, \"Invalid pattern \".concat(pattern));\n if (beginIndex > nextIndex) {\n result.push({\n type: 'literal',\n value: pattern.substring(nextIndex, beginIndex),\n });\n }\n result.push({\n type: pattern.substring(beginIndex + 1, endIndex),\n value: undefined,\n });\n nextIndex = endIndex + 1;\n beginIndex = pattern.indexOf('{', nextIndex);\n }\n if (nextIndex < length) {\n result.push({\n type: 'literal',\n value: pattern.substring(nextIndex, length),\n });\n }\n return result;\n}\n","import { LookupSupportedLocales } from '@formatjs/intl-localematcher';\nimport { ToObject } from './262';\nimport { GetOption } from './GetOption';\n/**\n * https://tc39.es/ecma402/#sec-supportedlocales\n * @param availableLocales\n * @param requestedLocales\n * @param options\n */\nexport function SupportedLocales(availableLocales, requestedLocales, options) {\n var matcher = 'best fit';\n if (options !== undefined) {\n options = ToObject(options);\n matcher = GetOption(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');\n }\n if (matcher === 'best fit') {\n return LookupSupportedLocales(Array.from(availableLocales), requestedLocales);\n }\n return LookupSupportedLocales(Array.from(availableLocales), requestedLocales);\n}\n","import { __extends } from \"tslib\";\nvar MissingLocaleDataError = /** @class */ (function (_super) {\n __extends(MissingLocaleDataError, _super);\n function MissingLocaleDataError() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'MISSING_LOCALE_DATA';\n return _this;\n }\n return MissingLocaleDataError;\n}(Error));\nexport function isMissingLocaleDataError(e) {\n return e.type === 'MISSING_LOCALE_DATA';\n}\n","export * from './CanonicalizeLocaleList';\nexport * from './CanonicalizeTimeZoneName';\nexport * from './CoerceOptionsToObject';\nexport * from './GetNumberOption';\nexport * from './GetOption';\nexport * from './GetOptionsObject';\nexport * from './GetStringOrBooleanOption';\nexport * from './IsSanctionedSimpleUnitIdentifier';\nexport * from './IsValidTimeZoneName';\nexport * from './IsWellFormedCurrencyCode';\nexport * from './IsWellFormedUnitIdentifier';\nexport * from './NumberFormat/ApplyUnsignedRoundingMode';\nexport * from './NumberFormat/CollapseNumberRange';\nexport * from './NumberFormat/ComputeExponent';\nexport * from './NumberFormat/ComputeExponentForMagnitude';\nexport * from './NumberFormat/CurrencyDigits';\nexport * from './NumberFormat/FormatApproximately';\nexport * from './NumberFormat/FormatNumericRange';\nexport * from './NumberFormat/FormatNumericRangeToParts';\nexport * from './NumberFormat/FormatNumericToParts';\nexport * from './NumberFormat/FormatNumericToString';\nexport * from './NumberFormat/GetUnsignedRoundingMode';\nexport * from './NumberFormat/InitializeNumberFormat';\nexport * from './NumberFormat/PartitionNumberPattern';\nexport * from './NumberFormat/PartitionNumberRangePattern';\nexport * from './NumberFormat/SetNumberFormatDigitOptions';\nexport * from './NumberFormat/SetNumberFormatUnitOptions';\nexport * from './NumberFormat/ToRawFixed';\nexport * from './NumberFormat/ToRawPrecision';\nexport { default as _formatToParts } from './NumberFormat/format_to_parts';\nexport * from './PartitionPattern';\nexport * from './SupportedLocales';\nexport { getInternalSlot, getMultiInternalSlots, isLiteralPart, setInternalSlot, setMultiInternalSlots, getMagnitude, defineProperty, } from './utils';\nexport { isMissingLocaleDataError } from './data';\nexport * from './types/relative-time';\nexport * from './types/date-time';\nexport * from './types/list';\nexport * from './types/plural-rules';\nexport * from './types/number';\nexport * from './types/displaynames';\nexport { invariant } from './utils';\nexport * from './262';\n","// @generated from regex-gen.ts\nexport var S_UNICODE_REGEX = /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20BF\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC1\\uFDFC\\uFDFD\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEE0-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6\\uDF00-\\uDF92\\uDF94-\\uDFCA]/;\n","export var RangePatternType;\n(function (RangePatternType) {\n RangePatternType[\"startRange\"] = \"startRange\";\n RangePatternType[\"shared\"] = \"shared\";\n RangePatternType[\"endRange\"] = \"endRange\";\n})(RangePatternType || (RangePatternType = {}));\n","/**\n * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue\n * @param x number\n */\nexport function getMagnitude(x) {\n // Cannot count string length via Number.toString because it may use scientific notation\n // for very small or very large numbers.\n return Math.floor(Math.log(x) * Math.LOG10E);\n}\nexport function repeat(s, times) {\n if (typeof s.repeat === 'function') {\n return s.repeat(times);\n }\n var arr = new Array(times);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = s;\n }\n return arr.join('');\n}\nexport function setInternalSlot(map, pl, field, value) {\n if (!map.get(pl)) {\n map.set(pl, Object.create(null));\n }\n var slots = map.get(pl);\n slots[field] = value;\n}\nexport function setMultiInternalSlots(map, pl, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var k = _a[_i];\n setInternalSlot(map, pl, k, props[k]);\n }\n}\nexport function getInternalSlot(map, pl, field) {\n return getMultiInternalSlots(map, pl, field)[field];\n}\nexport function getMultiInternalSlots(map, pl) {\n var fields = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n fields[_i - 2] = arguments[_i];\n }\n var slots = map.get(pl);\n if (!slots) {\n throw new TypeError(\"\".concat(pl, \" InternalSlot has not been initialized\"));\n }\n return fields.reduce(function (all, f) {\n all[f] = slots[f];\n return all;\n }, Object.create(null));\n}\nexport function isLiteralPart(patternPart) {\n return patternPart.type === 'literal';\n}\n/*\n 17 ECMAScript Standard Built-in Objects:\n Every built-in Function object, including constructors, that is not\n identified as an anonymous function has a name property whose value\n is a String.\n\n Unless otherwise specified, the name property of a built-in Function\n object, if it exists, has the attributes { [[Writable]]: false,\n [[Enumerable]]: false, [[Configurable]]: true }.\n*/\nexport function defineProperty(target, name, _a) {\n var value = _a.value;\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: value,\n });\n}\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n if (Err === void 0) { Err = Error; }\n if (!condition) {\n throw new Err(message);\n }\n}\n","/**\n * https://tc39.es/ecma402/#sec-bestavailablelocale\n * @param availableLocales\n * @param locale\n */\nexport function BestAvailableLocale(availableLocales, locale) {\n var candidate = locale;\n while (true) {\n if (availableLocales.indexOf(candidate) > -1) {\n return candidate;\n }\n var pos = candidate.lastIndexOf('-');\n if (!~pos) {\n return undefined;\n }\n if (pos >= 2 && candidate[pos - 2] === '-') {\n pos -= 2;\n }\n candidate = candidate.slice(0, pos);\n }\n}\n","import { UNICODE_EXTENSION_SEQUENCE_REGEX, findBestMatch } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-bestfitmatcher\n * @param availableLocales\n * @param requestedLocales\n * @param getDefaultLocale\n */\nexport function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {\n var foundLocale;\n var extension;\n var noExtensionLocales = [];\n var noExtensionLocaleMap = requestedLocales.reduce(function (all, l) {\n var noExtensionLocale = l.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n noExtensionLocales.push(noExtensionLocale);\n all[noExtensionLocale] = l;\n return all;\n }, {});\n var result = findBestMatch(noExtensionLocales, availableLocales);\n if (result.matchedSupportedLocale && result.matchedDesiredLocale) {\n foundLocale = result.matchedSupportedLocale;\n extension =\n noExtensionLocaleMap[result.matchedDesiredLocale].slice(result.matchedDesiredLocale.length) || undefined;\n }\n if (!foundLocale) {\n return { locale: getDefaultLocale() };\n }\n return {\n locale: foundLocale,\n extension: extension,\n };\n}\n","/**\n * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist\n * @param locales\n */\nexport function CanonicalizeLocaleList(locales) {\n // TODO\n return Intl.getCanonicalLocales(locales);\n}\n","import { BestAvailableLocale } from './BestAvailableLocale';\nimport { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-lookupmatcher\n * @param availableLocales\n * @param requestedLocales\n * @param getDefaultLocale\n */\nexport function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {\n var result = { locale: '' };\n for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n var locale = requestedLocales_1[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);\n if (availableLocale) {\n result.locale = availableLocale;\n if (locale !== noExtensionLocale) {\n result.extension = locale.slice(noExtensionLocale.length, locale.length);\n }\n return result;\n }\n }\n result.locale = getDefaultLocale();\n return result;\n}\n","import { BestAvailableLocale } from './BestAvailableLocale';\nimport { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-lookupsupportedlocales\n * @param availableLocales\n * @param requestedLocales\n */\nexport function LookupSupportedLocales(availableLocales, requestedLocales) {\n var subset = [];\n for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n var locale = requestedLocales_1[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);\n if (availableLocale) {\n subset.push(availableLocale);\n }\n }\n return subset;\n}\n","import { BestFitMatcher } from './BestFitMatcher';\nimport { LookupMatcher } from './LookupMatcher';\nimport { UnicodeExtensionValue } from './UnicodeExtensionValue';\nimport { invariant } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-resolvelocale\n */\nexport function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {\n var matcher = options.localeMatcher;\n var r;\n if (matcher === 'lookup') {\n r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);\n }\n else {\n r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);\n }\n var foundLocale = r.locale;\n var result = { locale: '', dataLocale: foundLocale };\n var supportedExtension = '-u';\n for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {\n var key = relevantExtensionKeys_1[_i];\n invariant(foundLocale in localeData, \"Missing locale data for \".concat(foundLocale));\n var foundLocaleData = localeData[foundLocale];\n invariant(typeof foundLocaleData === 'object' && foundLocaleData !== null, \"locale data \".concat(key, \" must be an object\"));\n var keyLocaleData = foundLocaleData[key];\n invariant(Array.isArray(keyLocaleData), \"keyLocaleData for \".concat(key, \" must be an array\"));\n var value = keyLocaleData[0];\n invariant(typeof value === 'string' || value === null, \"value must be string or null but got \".concat(typeof value, \" in key \").concat(key));\n var supportedExtensionAddition = '';\n if (r.extension) {\n var requestedValue = UnicodeExtensionValue(r.extension, key);\n if (requestedValue !== undefined) {\n if (requestedValue !== '') {\n if (~keyLocaleData.indexOf(requestedValue)) {\n value = requestedValue;\n supportedExtensionAddition = \"-\".concat(key, \"-\").concat(value);\n }\n }\n else if (~requestedValue.indexOf('true')) {\n value = 'true';\n supportedExtensionAddition = \"-\".concat(key);\n }\n }\n }\n if (key in options) {\n var optionsValue = options[key];\n invariant(typeof optionsValue === 'string' ||\n typeof optionsValue === 'undefined' ||\n optionsValue === null, 'optionsValue must be String, Undefined or Null');\n if (~keyLocaleData.indexOf(optionsValue)) {\n if (optionsValue !== value) {\n value = optionsValue;\n supportedExtensionAddition = '';\n }\n }\n }\n result[key] = value;\n supportedExtension += supportedExtensionAddition;\n }\n if (supportedExtension.length > 2) {\n var privateIndex = foundLocale.indexOf('-x-');\n if (privateIndex === -1) {\n foundLocale = foundLocale + supportedExtension;\n }\n else {\n var preExtension = foundLocale.slice(0, privateIndex);\n var postExtension = foundLocale.slice(privateIndex, foundLocale.length);\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n foundLocale = Intl.getCanonicalLocales(foundLocale)[0];\n }\n result.locale = foundLocale;\n return result;\n}\n","import { invariant } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-unicodeextensionvalue\n * @param extension\n * @param key\n */\nexport function UnicodeExtensionValue(extension, key) {\n invariant(key.length === 2, 'key must have 2 elements');\n var size = extension.length;\n var searchValue = \"-\".concat(key, \"-\");\n var pos = extension.indexOf(searchValue);\n if (pos !== -1) {\n var start = pos + 4;\n var end = start;\n var k = start;\n var done = false;\n while (!done) {\n var e = extension.indexOf('-', k);\n var len = void 0;\n if (e === -1) {\n len = size - k;\n }\n else {\n len = e - k;\n }\n if (len === 2) {\n done = true;\n }\n else if (e === -1) {\n end = size;\n done = true;\n }\n else {\n end = e;\n k = e + 1;\n }\n }\n return extension.slice(start, end);\n }\n searchValue = \"-\".concat(key);\n pos = extension.indexOf(searchValue);\n if (pos !== -1 && pos + 3 === size) {\n return '';\n }\n return undefined;\n}\n","export var data = {\n supplemental: {\n languageMatching: {\n 'written-new': [\n {\n paradigmLocales: {\n _locales: 'en en_GB es es_419 pt_BR pt_PT',\n },\n },\n {\n $enUS: {\n _value: 'AS+CA+GU+MH+MP+PH+PR+UM+US+VI',\n },\n },\n {\n $cnsar: {\n _value: 'HK+MO',\n },\n },\n {\n $americas: {\n _value: '019',\n },\n },\n {\n $maghreb: {\n _value: 'MA+DZ+TN+LY+MR+EH',\n },\n },\n {\n no: {\n _desired: 'nb',\n _distance: '1',\n },\n },\n {\n bs: {\n _desired: 'hr',\n _distance: '4',\n },\n },\n {\n bs: {\n _desired: 'sh',\n _distance: '4',\n },\n },\n {\n hr: {\n _desired: 'sh',\n _distance: '4',\n },\n },\n {\n sr: {\n _desired: 'sh',\n _distance: '4',\n },\n },\n {\n aa: {\n _desired: 'ssy',\n _distance: '4',\n },\n },\n {\n de: {\n _desired: 'gsw',\n _distance: '4',\n _oneway: 'true',\n },\n },\n {\n de: {\n _desired: 'lb',\n _distance: '4',\n _oneway: 'true',\n },\n },\n {\n no: {\n _desired: 'da',\n _distance: '8',\n },\n },\n {\n nb: {\n _desired: 'da',\n _distance: '8',\n },\n },\n {\n ru: {\n _desired: 'ab',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ach',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n nl: {\n _desired: 'af',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ak',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'am',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'ay',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'az',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ur: {\n _desired: 'bal',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'be',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'bem',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'bh',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'bn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'bo',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'br',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'ca',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n fil: {\n _desired: 'ceb',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'chr',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ckb',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'co',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'crs',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n sk: {\n _desired: 'cs',\n _distance: '20',\n },\n },\n {\n en: {\n _desired: 'cy',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ee',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'eo',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'eu',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n da: {\n _desired: 'fo',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n nl: {\n _desired: 'fy',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ga',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'gaa',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'gd',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'gl',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'gn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'gu',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ha',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'haw',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'ht',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'hy',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ia',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ig',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'is',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n id: {\n _desired: 'jv',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ka',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'kg',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'kk',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'km',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'kn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'kri',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n tr: {\n _desired: 'ku',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'ky',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n it: {\n _desired: 'la',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'lg',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'ln',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'lo',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'loz',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'lua',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'mai',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'mfe',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'mg',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'mi',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ml',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'mn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'mr',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n id: {\n _desired: 'ms',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'mt',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'my',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ne',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n nb: {\n _desired: 'nn',\n _distance: '20',\n },\n },\n {\n no: {\n _desired: 'nn',\n _distance: '20',\n },\n },\n {\n en: {\n _desired: 'nso',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ny',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'nyn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'oc',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'om',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'or',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'pa',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'pcm',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ps',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'qu',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n de: {\n _desired: 'rm',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'rn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'rw',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'sa',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'sd',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'si',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'sn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'so',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'sq',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'st',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n id: {\n _desired: 'su',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'sw',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ta',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'te',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'tg',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ti',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'tk',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'tlh',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'tn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'to',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'tt',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'tum',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'ug',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'uk',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ur',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'uz',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'wo',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'xh',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'yi',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'yo',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'za',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'zu',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'aao',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'abh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'abv',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acx',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'adf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'aeb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'aec',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'afb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ajp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'apc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'apd',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'arq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ars',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ary',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'arz',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'auz',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'avl',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ayh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ayl',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ayn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ayp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'bbz',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'pga',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'shu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ssh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n az: {\n _desired: 'azb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n et: {\n _desired: 'vro',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'ffm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fub',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fue',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fuf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fuh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fui',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fuq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fuv',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n gn: {\n _desired: 'gnw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n gn: {\n _desired: 'gui',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n gn: {\n _desired: 'gun',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n gn: {\n _desired: 'nhd',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n iu: {\n _desired: 'ikt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'enb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'eyo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'niq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'oki',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'pko',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'sgc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'tec',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'tuy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kok: {\n _desired: 'gom',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kpe: {\n _desired: 'gkp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'ida',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lkb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lko',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lks',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lri',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lrm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lsm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lto',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lts',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lwg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'nle',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'nyd',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'rag',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n lv: {\n _desired: 'ltg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'bhr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'bjq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'bmm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'bzc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'msh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'skg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'tdx',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'tkg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'txy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'xmv',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'xmw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mn: {\n _desired: 'mvf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'bjn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'btj',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'bve',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'bvu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'coa',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'dup',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'hji',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'id',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'jak',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'jax',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'kvb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'kvr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'kxd',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'lce',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'lcf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'liw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'max',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'meo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'mfa',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'mfb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'min',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'mqg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'msi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'mui',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'orn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'ors',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'pel',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'pse',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'tmw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'urk',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'vkk',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'vkt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'xmm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'zlm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'zmi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ne: {\n _desired: 'dty',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n om: {\n _desired: 'gax',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n om: {\n _desired: 'hae',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n om: {\n _desired: 'orc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n or: {\n _desired: 'spv',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ps: {\n _desired: 'pbt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ps: {\n _desired: 'pst',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qub',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qud',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qug',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quk',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qul',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qup',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qur',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qus',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qux',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qva',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qve',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvj',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvl',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvs',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvz',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qwa',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qwc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qwh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qws',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxa',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxl',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sc: {\n _desired: 'sdc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sc: {\n _desired: 'sdn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sc: {\n _desired: 'sro',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sq: {\n _desired: 'aae',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sq: {\n _desired: 'aat',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sq: {\n _desired: 'aln',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n syr: {\n _desired: 'aii',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n uz: {\n _desired: 'uzs',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n yi: {\n _desired: 'yih',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'cdo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'cjy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'cpx',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'czh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'czo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'gan',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'hak',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'hsn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'lzh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'mnp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'nan',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'wuu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'yue',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n '*': {\n _desired: '*',\n _distance: '80',\n },\n },\n {\n 'en-Latn': {\n _desired: 'am-Ethi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'ru-Cyrl': {\n _desired: 'az-Latn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'bn-Beng',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'zh-Hans': {\n _desired: 'bo-Tibt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'ru-Cyrl': {\n _desired: 'hy-Armn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ka-Geor',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'km-Khmr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'kn-Knda',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'lo-Laoo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ml-Mlym',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'my-Mymr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ne-Deva',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'or-Orya',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'pa-Guru',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ps-Arab',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'sd-Arab',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'si-Sinh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ta-Taml',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'te-Telu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ti-Ethi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'ru-Cyrl': {\n _desired: 'tk-Latn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ur-Arab',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'ru-Cyrl': {\n _desired: 'uz-Latn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'yi-Hebr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'sr-Cyrl': {\n _desired: 'sr-Latn',\n _distance: '5',\n },\n },\n {\n 'zh-Hans': {\n _desired: 'za-Latn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'zh-Hans': {\n _desired: 'zh-Hani',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'zh-Hant': {\n _desired: 'zh-Hani',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'ar-Arab': {\n _desired: 'ar-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'bn-Beng': {\n _desired: 'bn-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'gu-Gujr': {\n _desired: 'gu-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'hi-Deva': {\n _desired: 'hi-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'kn-Knda': {\n _desired: 'kn-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'ml-Mlym': {\n _desired: 'ml-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'mr-Deva': {\n _desired: 'mr-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'ta-Taml': {\n _desired: 'ta-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'te-Telu': {\n _desired: 'te-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'zh-Hans': {\n _desired: 'zh-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Latn',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Hani',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Hira',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Kana',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Hrkt',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Hrkt': {\n _desired: 'ja-Hira',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Hrkt': {\n _desired: 'ja-Kana',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ko-Kore': {\n _desired: 'ko-Hani',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ko-Kore': {\n _desired: 'ko-Hang',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ko-Kore': {\n _desired: 'ko-Jamo',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ko-Hang': {\n _desired: 'ko-Jamo',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n '*-*': {\n _desired: '*-*',\n _distance: '50',\n },\n },\n {\n 'ar-*-$maghreb': {\n _desired: 'ar-*-$maghreb',\n _distance: '4',\n },\n },\n {\n 'ar-*-$!maghreb': {\n _desired: 'ar-*-$!maghreb',\n _distance: '4',\n },\n },\n {\n 'ar-*-*': {\n _desired: 'ar-*-*',\n _distance: '5',\n },\n },\n {\n 'en-*-$enUS': {\n _desired: 'en-*-$enUS',\n _distance: '4',\n },\n },\n {\n 'en-*-GB': {\n _desired: 'en-*-$!enUS',\n _distance: '3',\n },\n },\n {\n 'en-*-$!enUS': {\n _desired: 'en-*-$!enUS',\n _distance: '4',\n },\n },\n {\n 'en-*-*': {\n _desired: 'en-*-*',\n _distance: '5',\n },\n },\n {\n 'es-*-$americas': {\n _desired: 'es-*-$americas',\n _distance: '4',\n },\n },\n {\n 'es-*-$!americas': {\n _desired: 'es-*-$!americas',\n _distance: '4',\n },\n },\n {\n 'es-*-*': {\n _desired: 'es-*-*',\n _distance: '5',\n },\n },\n {\n 'pt-*-$americas': {\n _desired: 'pt-*-$americas',\n _distance: '4',\n },\n },\n {\n 'pt-*-$!americas': {\n _desired: 'pt-*-$!americas',\n _distance: '4',\n },\n },\n {\n 'pt-*-*': {\n _desired: 'pt-*-*',\n _distance: '5',\n },\n },\n {\n 'zh-Hant-$cnsar': {\n _desired: 'zh-Hant-$cnsar',\n _distance: '4',\n },\n },\n {\n 'zh-Hant-$!cnsar': {\n _desired: 'zh-Hant-$!cnsar',\n _distance: '4',\n },\n },\n {\n 'zh-Hant-*': {\n _desired: 'zh-Hant-*',\n _distance: '5',\n },\n },\n {\n '*-*-*': {\n _desired: '*-*-*',\n _distance: '4',\n },\n },\n ],\n },\n },\n};\n","// This file is generated from regions-gen.ts\nexport var regions = {\n \"001\": [\n \"001\",\n \"001-status-grouping\",\n \"002\",\n \"005\",\n \"009\",\n \"011\",\n \"013\",\n \"014\",\n \"015\",\n \"017\",\n \"018\",\n \"019\",\n \"021\",\n \"029\",\n \"030\",\n \"034\",\n \"035\",\n \"039\",\n \"053\",\n \"054\",\n \"057\",\n \"061\",\n \"142\",\n \"143\",\n \"145\",\n \"150\",\n \"151\",\n \"154\",\n \"155\",\n \"AC\",\n \"AD\",\n \"AE\",\n \"AF\",\n \"AG\",\n \"AI\",\n \"AL\",\n \"AM\",\n \"AO\",\n \"AQ\",\n \"AR\",\n \"AS\",\n \"AT\",\n \"AU\",\n \"AW\",\n \"AX\",\n \"AZ\",\n \"BA\",\n \"BB\",\n \"BD\",\n \"BE\",\n \"BF\",\n \"BG\",\n \"BH\",\n \"BI\",\n \"BJ\",\n \"BL\",\n \"BM\",\n \"BN\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BT\",\n \"BV\",\n \"BW\",\n \"BY\",\n \"BZ\",\n \"CA\",\n \"CC\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CH\",\n \"CI\",\n \"CK\",\n \"CL\",\n \"CM\",\n \"CN\",\n \"CO\",\n \"CP\",\n \"CQ\",\n \"CR\",\n \"CU\",\n \"CV\",\n \"CW\",\n \"CX\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DG\",\n \"DJ\",\n \"DK\",\n \"DM\",\n \"DO\",\n \"DZ\",\n \"EA\",\n \"EC\",\n \"EE\",\n \"EG\",\n \"EH\",\n \"ER\",\n \"ES\",\n \"ET\",\n \"EU\",\n \"EZ\",\n \"FI\",\n \"FJ\",\n \"FK\",\n \"FM\",\n \"FO\",\n \"FR\",\n \"GA\",\n \"GB\",\n \"GD\",\n \"GE\",\n \"GF\",\n \"GG\",\n \"GH\",\n \"GI\",\n \"GL\",\n \"GM\",\n \"GN\",\n \"GP\",\n \"GQ\",\n \"GR\",\n \"GS\",\n \"GT\",\n \"GU\",\n \"GW\",\n \"GY\",\n \"HK\",\n \"HM\",\n \"HN\",\n \"HR\",\n \"HT\",\n \"HU\",\n \"IC\",\n \"ID\",\n \"IE\",\n \"IL\",\n \"IM\",\n \"IN\",\n \"IO\",\n \"IQ\",\n \"IR\",\n \"IS\",\n \"IT\",\n \"JE\",\n \"JM\",\n \"JO\",\n \"JP\",\n \"KE\",\n \"KG\",\n \"KH\",\n \"KI\",\n \"KM\",\n \"KN\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KY\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LC\",\n \"LI\",\n \"LK\",\n \"LR\",\n \"LS\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"LY\",\n \"MA\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MF\",\n \"MG\",\n \"MH\",\n \"MK\",\n \"ML\",\n \"MM\",\n \"MN\",\n \"MO\",\n \"MP\",\n \"MQ\",\n \"MR\",\n \"MS\",\n \"MT\",\n \"MU\",\n \"MV\",\n \"MW\",\n \"MX\",\n \"MY\",\n \"MZ\",\n \"NA\",\n \"NC\",\n \"NE\",\n \"NF\",\n \"NG\",\n \"NI\",\n \"NL\",\n \"NO\",\n \"NP\",\n \"NR\",\n \"NU\",\n \"NZ\",\n \"OM\",\n \"PA\",\n \"PE\",\n \"PF\",\n \"PG\",\n \"PH\",\n \"PK\",\n \"PL\",\n \"PM\",\n \"PN\",\n \"PR\",\n \"PS\",\n \"PT\",\n \"PW\",\n \"PY\",\n \"QA\",\n \"QO\",\n \"RE\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"RW\",\n \"SA\",\n \"SB\",\n \"SC\",\n \"SD\",\n \"SE\",\n \"SG\",\n \"SH\",\n \"SI\",\n \"SJ\",\n \"SK\",\n \"SL\",\n \"SM\",\n \"SN\",\n \"SO\",\n \"SR\",\n \"SS\",\n \"ST\",\n \"SV\",\n \"SX\",\n \"SY\",\n \"SZ\",\n \"TA\",\n \"TC\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TH\",\n \"TJ\",\n \"TK\",\n \"TL\",\n \"TM\",\n \"TN\",\n \"TO\",\n \"TR\",\n \"TT\",\n \"TV\",\n \"TW\",\n \"TZ\",\n \"UA\",\n \"UG\",\n \"UM\",\n \"UN\",\n \"US\",\n \"UY\",\n \"UZ\",\n \"VA\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\",\n \"VN\",\n \"VU\",\n \"WF\",\n \"WS\",\n \"XK\",\n \"YE\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ],\n \"002\": [\n \"002\",\n \"002-status-grouping\",\n \"011\",\n \"014\",\n \"015\",\n \"017\",\n \"018\",\n \"202\",\n \"AO\",\n \"BF\",\n \"BI\",\n \"BJ\",\n \"BW\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CI\",\n \"CM\",\n \"CV\",\n \"DJ\",\n \"DZ\",\n \"EA\",\n \"EG\",\n \"EH\",\n \"ER\",\n \"ET\",\n \"GA\",\n \"GH\",\n \"GM\",\n \"GN\",\n \"GQ\",\n \"GW\",\n \"IC\",\n \"IO\",\n \"KE\",\n \"KM\",\n \"LR\",\n \"LS\",\n \"LY\",\n \"MA\",\n \"MG\",\n \"ML\",\n \"MR\",\n \"MU\",\n \"MW\",\n \"MZ\",\n \"NA\",\n \"NE\",\n \"NG\",\n \"RE\",\n \"RW\",\n \"SC\",\n \"SD\",\n \"SH\",\n \"SL\",\n \"SN\",\n \"SO\",\n \"SS\",\n \"ST\",\n \"SZ\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TN\",\n \"TZ\",\n \"UG\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ],\n \"003\": [\n \"003\",\n \"013\",\n \"021\",\n \"029\",\n \"AG\",\n \"AI\",\n \"AW\",\n \"BB\",\n \"BL\",\n \"BM\",\n \"BQ\",\n \"BS\",\n \"BZ\",\n \"CA\",\n \"CR\",\n \"CU\",\n \"CW\",\n \"DM\",\n \"DO\",\n \"GD\",\n \"GL\",\n \"GP\",\n \"GT\",\n \"HN\",\n \"HT\",\n \"JM\",\n \"KN\",\n \"KY\",\n \"LC\",\n \"MF\",\n \"MQ\",\n \"MS\",\n \"MX\",\n \"NI\",\n \"PA\",\n \"PM\",\n \"PR\",\n \"SV\",\n \"SX\",\n \"TC\",\n \"TT\",\n \"US\",\n \"VC\",\n \"VG\",\n \"VI\"\n ],\n \"005\": [\n \"005\",\n \"AR\",\n \"BO\",\n \"BR\",\n \"BV\",\n \"CL\",\n \"CO\",\n \"EC\",\n \"FK\",\n \"GF\",\n \"GS\",\n \"GY\",\n \"PE\",\n \"PY\",\n \"SR\",\n \"UY\",\n \"VE\"\n ],\n \"009\": [\n \"009\",\n \"053\",\n \"054\",\n \"057\",\n \"061\",\n \"AC\",\n \"AQ\",\n \"AS\",\n \"AU\",\n \"CC\",\n \"CK\",\n \"CP\",\n \"CX\",\n \"DG\",\n \"FJ\",\n \"FM\",\n \"GU\",\n \"HM\",\n \"KI\",\n \"MH\",\n \"MP\",\n \"NC\",\n \"NF\",\n \"NR\",\n \"NU\",\n \"NZ\",\n \"PF\",\n \"PG\",\n \"PN\",\n \"PW\",\n \"QO\",\n \"SB\",\n \"TA\",\n \"TK\",\n \"TO\",\n \"TV\",\n \"UM\",\n \"VU\",\n \"WF\",\n \"WS\"\n ],\n \"011\": [\n \"011\",\n \"BF\",\n \"BJ\",\n \"CI\",\n \"CV\",\n \"GH\",\n \"GM\",\n \"GN\",\n \"GW\",\n \"LR\",\n \"ML\",\n \"MR\",\n \"NE\",\n \"NG\",\n \"SH\",\n \"SL\",\n \"SN\",\n \"TG\"\n ],\n \"013\": [\n \"013\",\n \"BZ\",\n \"CR\",\n \"GT\",\n \"HN\",\n \"MX\",\n \"NI\",\n \"PA\",\n \"SV\"\n ],\n \"014\": [\n \"014\",\n \"BI\",\n \"DJ\",\n \"ER\",\n \"ET\",\n \"IO\",\n \"KE\",\n \"KM\",\n \"MG\",\n \"MU\",\n \"MW\",\n \"MZ\",\n \"RE\",\n \"RW\",\n \"SC\",\n \"SO\",\n \"SS\",\n \"TF\",\n \"TZ\",\n \"UG\",\n \"YT\",\n \"ZM\",\n \"ZW\"\n ],\n \"015\": [\n \"015\",\n \"DZ\",\n \"EA\",\n \"EG\",\n \"EH\",\n \"IC\",\n \"LY\",\n \"MA\",\n \"SD\",\n \"TN\"\n ],\n \"017\": [\n \"017\",\n \"AO\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CM\",\n \"GA\",\n \"GQ\",\n \"ST\",\n \"TD\"\n ],\n \"018\": [\n \"018\",\n \"BW\",\n \"LS\",\n \"NA\",\n \"SZ\",\n \"ZA\"\n ],\n \"019\": [\n \"003\",\n \"005\",\n \"013\",\n \"019\",\n \"019-status-grouping\",\n \"021\",\n \"029\",\n \"419\",\n \"AG\",\n \"AI\",\n \"AR\",\n \"AW\",\n \"BB\",\n \"BL\",\n \"BM\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BV\",\n \"BZ\",\n \"CA\",\n \"CL\",\n \"CO\",\n \"CR\",\n \"CU\",\n \"CW\",\n \"DM\",\n \"DO\",\n \"EC\",\n \"FK\",\n \"GD\",\n \"GF\",\n \"GL\",\n \"GP\",\n \"GS\",\n \"GT\",\n \"GY\",\n \"HN\",\n \"HT\",\n \"JM\",\n \"KN\",\n \"KY\",\n \"LC\",\n \"MF\",\n \"MQ\",\n \"MS\",\n \"MX\",\n \"NI\",\n \"PA\",\n \"PE\",\n \"PM\",\n \"PR\",\n \"PY\",\n \"SR\",\n \"SV\",\n \"SX\",\n \"TC\",\n \"TT\",\n \"US\",\n \"UY\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\"\n ],\n \"021\": [\n \"021\",\n \"BM\",\n \"CA\",\n \"GL\",\n \"PM\",\n \"US\"\n ],\n \"029\": [\n \"029\",\n \"AG\",\n \"AI\",\n \"AW\",\n \"BB\",\n \"BL\",\n \"BQ\",\n \"BS\",\n \"CU\",\n \"CW\",\n \"DM\",\n \"DO\",\n \"GD\",\n \"GP\",\n \"HT\",\n \"JM\",\n \"KN\",\n \"KY\",\n \"LC\",\n \"MF\",\n \"MQ\",\n \"MS\",\n \"PR\",\n \"SX\",\n \"TC\",\n \"TT\",\n \"VC\",\n \"VG\",\n \"VI\"\n ],\n \"030\": [\n \"030\",\n \"CN\",\n \"HK\",\n \"JP\",\n \"KP\",\n \"KR\",\n \"MN\",\n \"MO\",\n \"TW\"\n ],\n \"034\": [\n \"034\",\n \"AF\",\n \"BD\",\n \"BT\",\n \"IN\",\n \"IR\",\n \"LK\",\n \"MV\",\n \"NP\",\n \"PK\"\n ],\n \"035\": [\n \"035\",\n \"BN\",\n \"ID\",\n \"KH\",\n \"LA\",\n \"MM\",\n \"MY\",\n \"PH\",\n \"SG\",\n \"TH\",\n \"TL\",\n \"VN\"\n ],\n \"039\": [\n \"039\",\n \"AD\",\n \"AL\",\n \"BA\",\n \"ES\",\n \"GI\",\n \"GR\",\n \"HR\",\n \"IT\",\n \"ME\",\n \"MK\",\n \"MT\",\n \"PT\",\n \"RS\",\n \"SI\",\n \"SM\",\n \"VA\",\n \"XK\"\n ],\n \"053\": [\n \"053\",\n \"AU\",\n \"CC\",\n \"CX\",\n \"HM\",\n \"NF\",\n \"NZ\"\n ],\n \"054\": [\n \"054\",\n \"FJ\",\n \"NC\",\n \"PG\",\n \"SB\",\n \"VU\"\n ],\n \"057\": [\n \"057\",\n \"FM\",\n \"GU\",\n \"KI\",\n \"MH\",\n \"MP\",\n \"NR\",\n \"PW\",\n \"UM\"\n ],\n \"061\": [\n \"061\",\n \"AS\",\n \"CK\",\n \"NU\",\n \"PF\",\n \"PN\",\n \"TK\",\n \"TO\",\n \"TV\",\n \"WF\",\n \"WS\"\n ],\n \"142\": [\n \"030\",\n \"034\",\n \"035\",\n \"142\",\n \"143\",\n \"145\",\n \"AE\",\n \"AF\",\n \"AM\",\n \"AZ\",\n \"BD\",\n \"BH\",\n \"BN\",\n \"BT\",\n \"CN\",\n \"CY\",\n \"GE\",\n \"HK\",\n \"ID\",\n \"IL\",\n \"IN\",\n \"IQ\",\n \"IR\",\n \"JO\",\n \"JP\",\n \"KG\",\n \"KH\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LK\",\n \"MM\",\n \"MN\",\n \"MO\",\n \"MV\",\n \"MY\",\n \"NP\",\n \"OM\",\n \"PH\",\n \"PK\",\n \"PS\",\n \"QA\",\n \"SA\",\n \"SG\",\n \"SY\",\n \"TH\",\n \"TJ\",\n \"TL\",\n \"TM\",\n \"TR\",\n \"TW\",\n \"UZ\",\n \"VN\",\n \"YE\"\n ],\n \"143\": [\n \"143\",\n \"KG\",\n \"KZ\",\n \"TJ\",\n \"TM\",\n \"UZ\"\n ],\n \"145\": [\n \"145\",\n \"AE\",\n \"AM\",\n \"AZ\",\n \"BH\",\n \"CY\",\n \"GE\",\n \"IL\",\n \"IQ\",\n \"JO\",\n \"KW\",\n \"LB\",\n \"OM\",\n \"PS\",\n \"QA\",\n \"SA\",\n \"SY\",\n \"TR\",\n \"YE\"\n ],\n \"150\": [\n \"039\",\n \"150\",\n \"151\",\n \"154\",\n \"155\",\n \"AD\",\n \"AL\",\n \"AT\",\n \"AX\",\n \"BA\",\n \"BE\",\n \"BG\",\n \"BY\",\n \"CH\",\n \"CQ\",\n \"CZ\",\n \"DE\",\n \"DK\",\n \"EE\",\n \"ES\",\n \"FI\",\n \"FO\",\n \"FR\",\n \"GB\",\n \"GG\",\n \"GI\",\n \"GR\",\n \"HR\",\n \"HU\",\n \"IE\",\n \"IM\",\n \"IS\",\n \"IT\",\n \"JE\",\n \"LI\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MK\",\n \"MT\",\n \"NL\",\n \"NO\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"SE\",\n \"SI\",\n \"SJ\",\n \"SK\",\n \"SM\",\n \"UA\",\n \"VA\",\n \"XK\"\n ],\n \"151\": [\n \"151\",\n \"BG\",\n \"BY\",\n \"CZ\",\n \"HU\",\n \"MD\",\n \"PL\",\n \"RO\",\n \"RU\",\n \"SK\",\n \"UA\"\n ],\n \"154\": [\n \"154\",\n \"AX\",\n \"CQ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FO\",\n \"GB\",\n \"GG\",\n \"IE\",\n \"IM\",\n \"IS\",\n \"JE\",\n \"LT\",\n \"LV\",\n \"NO\",\n \"SE\",\n \"SJ\"\n ],\n \"155\": [\n \"155\",\n \"AT\",\n \"BE\",\n \"CH\",\n \"DE\",\n \"FR\",\n \"LI\",\n \"LU\",\n \"MC\",\n \"NL\"\n ],\n \"202\": [\n \"011\",\n \"014\",\n \"017\",\n \"018\",\n \"202\",\n \"AO\",\n \"BF\",\n \"BI\",\n \"BJ\",\n \"BW\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CI\",\n \"CM\",\n \"CV\",\n \"DJ\",\n \"ER\",\n \"ET\",\n \"GA\",\n \"GH\",\n \"GM\",\n \"GN\",\n \"GQ\",\n \"GW\",\n \"IO\",\n \"KE\",\n \"KM\",\n \"LR\",\n \"LS\",\n \"MG\",\n \"ML\",\n \"MR\",\n \"MU\",\n \"MW\",\n \"MZ\",\n \"NA\",\n \"NE\",\n \"NG\",\n \"RE\",\n \"RW\",\n \"SC\",\n \"SH\",\n \"SL\",\n \"SN\",\n \"SO\",\n \"SS\",\n \"ST\",\n \"SZ\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TZ\",\n \"UG\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ],\n \"419\": [\n \"005\",\n \"013\",\n \"029\",\n \"419\",\n \"AG\",\n \"AI\",\n \"AR\",\n \"AW\",\n \"BB\",\n \"BL\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BV\",\n \"BZ\",\n \"CL\",\n \"CO\",\n \"CR\",\n \"CU\",\n \"CW\",\n \"DM\",\n \"DO\",\n \"EC\",\n \"FK\",\n \"GD\",\n \"GF\",\n \"GP\",\n \"GS\",\n \"GT\",\n \"GY\",\n \"HN\",\n \"HT\",\n \"JM\",\n \"KN\",\n \"KY\",\n \"LC\",\n \"MF\",\n \"MQ\",\n \"MS\",\n \"MX\",\n \"NI\",\n \"PA\",\n \"PE\",\n \"PR\",\n \"PY\",\n \"SR\",\n \"SV\",\n \"SX\",\n \"TC\",\n \"TT\",\n \"UY\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\"\n ],\n \"EU\": [\n \"AT\",\n \"BE\",\n \"BG\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DK\",\n \"EE\",\n \"ES\",\n \"EU\",\n \"FI\",\n \"FR\",\n \"GR\",\n \"HR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SE\",\n \"SI\",\n \"SK\"\n ],\n \"EZ\": [\n \"AT\",\n \"BE\",\n \"CY\",\n \"DE\",\n \"EE\",\n \"ES\",\n \"EZ\",\n \"FI\",\n \"FR\",\n \"GR\",\n \"IE\",\n \"IT\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"MT\",\n \"NL\",\n \"PT\",\n \"SI\",\n \"SK\"\n ],\n \"QO\": [\n \"AC\",\n \"AQ\",\n \"CP\",\n \"DG\",\n \"QO\",\n \"TA\"\n ],\n \"UN\": [\n \"AD\",\n \"AE\",\n \"AF\",\n \"AG\",\n \"AL\",\n \"AM\",\n \"AO\",\n \"AR\",\n \"AT\",\n \"AU\",\n \"AZ\",\n \"BA\",\n \"BB\",\n \"BD\",\n \"BE\",\n \"BF\",\n \"BG\",\n \"BH\",\n \"BI\",\n \"BJ\",\n \"BN\",\n \"BO\",\n \"BR\",\n \"BS\",\n \"BT\",\n \"BW\",\n \"BY\",\n \"BZ\",\n \"CA\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CH\",\n \"CI\",\n \"CL\",\n \"CM\",\n \"CN\",\n \"CO\",\n \"CR\",\n \"CU\",\n \"CV\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DJ\",\n \"DK\",\n \"DM\",\n \"DO\",\n \"DZ\",\n \"EC\",\n \"EE\",\n \"EG\",\n \"ER\",\n \"ES\",\n \"ET\",\n \"FI\",\n \"FJ\",\n \"FM\",\n \"FR\",\n \"GA\",\n \"GB\",\n \"GD\",\n \"GE\",\n \"GH\",\n \"GM\",\n \"GN\",\n \"GQ\",\n \"GR\",\n \"GT\",\n \"GW\",\n \"GY\",\n \"HN\",\n \"HR\",\n \"HT\",\n \"HU\",\n \"ID\",\n \"IE\",\n \"IL\",\n \"IN\",\n \"IQ\",\n \"IR\",\n \"IS\",\n \"IT\",\n \"JM\",\n \"JO\",\n \"JP\",\n \"KE\",\n \"KG\",\n \"KH\",\n \"KI\",\n \"KM\",\n \"KN\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LC\",\n \"LI\",\n \"LK\",\n \"LR\",\n \"LS\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"LY\",\n \"MA\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MG\",\n \"MH\",\n \"MK\",\n \"ML\",\n \"MM\",\n \"MN\",\n \"MR\",\n \"MT\",\n \"MU\",\n \"MV\",\n \"MW\",\n \"MX\",\n \"MY\",\n \"MZ\",\n \"NA\",\n \"NE\",\n \"NG\",\n \"NI\",\n \"NL\",\n \"NO\",\n \"NP\",\n \"NR\",\n \"NZ\",\n \"OM\",\n \"PA\",\n \"PE\",\n \"PG\",\n \"PH\",\n \"PK\",\n \"PL\",\n \"PT\",\n \"PW\",\n \"PY\",\n \"QA\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"RW\",\n \"SA\",\n \"SB\",\n \"SC\",\n \"SD\",\n \"SE\",\n \"SG\",\n \"SI\",\n \"SK\",\n \"SL\",\n \"SM\",\n \"SN\",\n \"SO\",\n \"SR\",\n \"SS\",\n \"ST\",\n \"SV\",\n \"SY\",\n \"SZ\",\n \"TD\",\n \"TG\",\n \"TH\",\n \"TJ\",\n \"TL\",\n \"TM\",\n \"TN\",\n \"TO\",\n \"TR\",\n \"TT\",\n \"TV\",\n \"TZ\",\n \"UA\",\n \"UG\",\n \"UN\",\n \"US\",\n \"UY\",\n \"UZ\",\n \"VC\",\n \"VE\",\n \"VN\",\n \"VU\",\n \"WS\",\n \"YE\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ]\n};\n","import { __spreadArray } from \"tslib\";\nimport { data as jsonData } from './languageMatching';\nimport { regions } from './regions.generated';\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n if (Err === void 0) { Err = Error; }\n if (!condition) {\n throw new Err(message);\n }\n}\n// This is effectively 2 languages in 2 different regions in the same cluster\nvar DEFAULT_MATCHING_THRESHOLD = 838;\nvar PROCESSED_DATA;\nfunction processData() {\n var _a, _b;\n if (!PROCESSED_DATA) {\n var paradigmLocales = (_b = (_a = jsonData.supplemental.languageMatching['written-new'][0]) === null || _a === void 0 ? void 0 : _a.paradigmLocales) === null || _b === void 0 ? void 0 : _b._locales.split(' ');\n var matchVariables = jsonData.supplemental.languageMatching['written-new'].slice(1, 5);\n var data = jsonData.supplemental.languageMatching['written-new'].slice(5);\n var matches = data.map(function (d) {\n var key = Object.keys(d)[0];\n var value = d[key];\n return {\n supported: key,\n desired: value._desired,\n distance: +value._distance,\n oneway: value.oneway === 'true' ? true : false,\n };\n }, {});\n PROCESSED_DATA = {\n matches: matches,\n matchVariables: matchVariables.reduce(function (all, d) {\n var key = Object.keys(d)[0];\n var value = d[key];\n all[key.slice(1)] = value._value.split('+');\n return all;\n }, {}),\n paradigmLocales: __spreadArray(__spreadArray([], paradigmLocales, true), paradigmLocales.map(function (l) {\n return new Intl.Locale(l.replace(/_/g, '-')).maximize().toString();\n }), true),\n };\n }\n return PROCESSED_DATA;\n}\nfunction isMatched(locale, languageMatchInfoLocale, matchVariables) {\n var _a = languageMatchInfoLocale.split('-'), language = _a[0], script = _a[1], region = _a[2];\n var matches = true;\n if (region && region[0] === '$') {\n var shouldInclude = region[1] !== '!';\n var matchRegions = shouldInclude\n ? matchVariables[region.slice(1)]\n : matchVariables[region.slice(2)];\n var expandedMatchedRegions = matchRegions\n .map(function (r) { return regions[r] || [r]; })\n .reduce(function (all, list) { return __spreadArray(__spreadArray([], all, true), list, true); }, []);\n matches && (matches = !(expandedMatchedRegions.indexOf(locale.region || '') > 1 !=\n shouldInclude));\n }\n else {\n matches && (matches = locale.region\n ? region === '*' || region === locale.region\n : true);\n }\n matches && (matches = locale.script ? script === '*' || script === locale.script : true);\n matches && (matches = locale.language\n ? language === '*' || language === locale.language\n : true);\n return matches;\n}\nfunction serializeLSR(lsr) {\n return [lsr.language, lsr.script, lsr.region].filter(Boolean).join('-');\n}\nfunction findMatchingDistanceForLSR(desired, supported, data) {\n for (var _i = 0, _a = data.matches; _i < _a.length; _i++) {\n var d = _a[_i];\n var matches = isMatched(desired, d.desired, data.matchVariables) &&\n isMatched(supported, d.supported, data.matchVariables);\n if (!d.oneway && !matches) {\n matches =\n isMatched(desired, d.supported, data.matchVariables) &&\n isMatched(supported, d.desired, data.matchVariables);\n }\n if (matches) {\n var distance = d.distance * 10;\n if (data.paradigmLocales.indexOf(serializeLSR(desired)) > -1 !=\n data.paradigmLocales.indexOf(serializeLSR(supported)) > -1) {\n return distance - 1;\n }\n return distance;\n }\n }\n throw new Error('No matching distance found');\n}\nexport function findMatchingDistance(desired, supported) {\n var desiredLocale = new Intl.Locale(desired).maximize();\n var supportedLocale = new Intl.Locale(supported).maximize();\n var desiredLSR = {\n language: desiredLocale.language,\n script: desiredLocale.script || '',\n region: desiredLocale.region || '',\n };\n var supportedLSR = {\n language: supportedLocale.language,\n script: supportedLocale.script || '',\n region: supportedLocale.region || '',\n };\n var matchingDistance = 0;\n var data = processData();\n if (desiredLSR.language !== supportedLSR.language) {\n matchingDistance += findMatchingDistanceForLSR({\n language: desiredLocale.language,\n script: '',\n region: '',\n }, {\n language: supportedLocale.language,\n script: '',\n region: '',\n }, data);\n }\n if (desiredLSR.script !== supportedLSR.script) {\n matchingDistance += findMatchingDistanceForLSR({\n language: desiredLocale.language,\n script: desiredLSR.script,\n region: '',\n }, {\n language: supportedLocale.language,\n script: desiredLSR.script,\n region: '',\n }, data);\n }\n if (desiredLSR.region !== supportedLSR.region) {\n matchingDistance += findMatchingDistanceForLSR(desiredLSR, supportedLSR, data);\n }\n return matchingDistance;\n}\nexport function findBestMatch(requestedLocales, supportedLocales, threshold) {\n if (threshold === void 0) { threshold = DEFAULT_MATCHING_THRESHOLD; }\n var lowestDistance = Infinity;\n var result = {\n matchedDesiredLocale: '',\n distances: {},\n };\n requestedLocales.forEach(function (desired, i) {\n if (!result.distances[desired]) {\n result.distances[desired] = {};\n }\n supportedLocales.forEach(function (supported) {\n // Add some weight to the distance based on the order of the supported locales\n // Add penalty for the order of the requested locales, which currently is 0 since ECMA-402\n // doesn't really have room for weighted locales like `en; q=0.1`\n var distance = findMatchingDistance(desired, supported) + 0 + i * 40;\n result.distances[desired][supported] = distance;\n if (distance < lowestDistance) {\n lowestDistance = distance;\n result.matchedDesiredLocale = desired;\n result.matchedSupportedLocale = supported;\n }\n });\n });\n if (lowestDistance >= threshold) {\n result.matchedDesiredLocale = undefined;\n result.matchedSupportedLocale = undefined;\n }\n return result;\n}\n","import { CanonicalizeLocaleList } from './abstract/CanonicalizeLocaleList';\nimport { ResolveLocale } from './abstract/ResolveLocale';\nexport function match(requestedLocales, availableLocales, defaultLocale, opts) {\n return ResolveLocale(availableLocales, CanonicalizeLocaleList(requestedLocales), {\n localeMatcher: (opts === null || opts === void 0 ? void 0 : opts.algorithm) || 'best fit',\n }, [], {}, function () { return defaultLocale; }).locale;\n}\nexport { LookupSupportedLocales } from './abstract/LookupSupportedLocales';\nexport { ResolveLocale } from './abstract/ResolveLocale';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar segmenter_1 = require(\"./src/segmenter\");\nvar should_polyfill_1 = require(\"./should-polyfill\");\nif ((0, should_polyfill_1.shouldPolyfill)()) {\n Object.defineProperty(Intl, 'Segmenter', {\n value: segmenter_1.Segmenter,\n enumerable: false,\n writable: true,\n configurable: true,\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldPolyfill = void 0;\nfunction shouldPolyfill() {\n return !Intl.Segmenter;\n}\nexports.shouldPolyfill = shouldPolyfill;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SegmentationRules = void 0;\n/* @generated */\n// prettier-ignore\nexports.SegmentationRules = {\n \"de\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"Port.\",\n \"Alt.\",\n \"Di.\",\n \"Ges.\",\n \"frz.\",\n \"entspr.\",\n \"Gebr.\",\n \"erw.\",\n \"Frl.\",\n \"Inh.\",\n \"k.u.k.\",\n \"Ca.\",\n \"J.D.\",\n \"Ausg.\",\n \"evtl.\",\n \"So.\",\n \"i.B.\",\n \"s.a.\",\n \"kgl.\",\n \"Sept.\",\n \"o.B.\",\n \"Sa.\",\n \"ev.\",\n \"Dez.\",\n \"am.\",\n \"i.R.\",\n \"eigtl.\",\n \"i.J.\",\n \"u.U.\",\n \"G.\",\n \"z.Hd.\",\n \"u.A.w.g.\",\n \"Kl.\",\n \"Spezif.\",\n \"Obj.\",\n \"Ing.\",\n \"D. h.\",\n \"Folg.\",\n \"Akt.\",\n \"i.A.\",\n \"Msp.\",\n \"U.U.\",\n \"Chr.\",\n \"R.\",\n \"Einh.\",\n \"schwäb.\",\n \"Vgl.\",\n \"Aug.\",\n \"Dipl.-Ing.\",\n \"W.\",\n \"B.\",\n \"U. U.\",\n \"J.\",\n \"Fa.\",\n \"Mo.\",\n \"n.u.Z.\",\n \"Op.\",\n \"Mrd.\",\n \"e.h.\",\n \"Hr.\",\n \"Hrn.\",\n \"Ztr.\",\n \"k. u. k.\",\n \"Bibl.\",\n \"d.Ä.\",\n \"b.\",\n \"M.\",\n \"i.H.\",\n \"v.R.w.\",\n \"o.A.\",\n \"St.\",\n \"Dr.\",\n \"Fn.\",\n \"Abs.\",\n \"Rd.\",\n \"Dtzd.\",\n \"Jahrh.\",\n \"Z.\",\n \"Std.\",\n \"n. Chr.\",\n \"möbl.\",\n \"tägl.\",\n \"gest.\",\n \"gesch.\",\n \"z.B.\",\n \"Hbf.\",\n \"Abt.\",\n \"A.M.\",\n \"e.Wz.\",\n \"v.T.\",\n \"Nov.\",\n \"z.\",\n \"Prot.\",\n \"U.S.\",\n \"Wg.\",\n \"u.v.a.\",\n \"Adr.\",\n \"App.\",\n \"ggf.\",\n \"ggfs.\",\n \"Jan.\",\n \"O.\",\n \"Rel.\",\n \"od.\",\n \"Pfd.\",\n \"a.a.O.\",\n \"p.Adr.\",\n \"P.\",\n \"Gem.\",\n \"v. Chr.\",\n \"Art.\",\n \"z.Z.\",\n \"S.A.\",\n \"i.V.\",\n \"verh.\",\n \"Ausschl.\",\n \"m.W.\",\n \"Dir.\",\n \"Verf.\",\n \"Sek.\",\n \"r.\",\n \"Chin.\",\n \"Feb.\",\n \"Int.\",\n \"Sep.\",\n \"Gesch.\",\n \"schweiz.\",\n \"Bed.\",\n \"a.Rh.\",\n \"jew.\",\n \"vgl.\",\n \"a.M.\",\n \"Str.\",\n \"exkl.\",\n \"gek.\",\n \"Erf.\",\n \"u.Ä.\",\n \"ehem.\",\n \"näml.\",\n \"u. Z.\",\n \"v. u. Z.\",\n \"sog.\",\n \"C.\",\n \"Dipl.-Kfm.\",\n \"mtl.\",\n \"Hrsg.\",\n \"Qu.\",\n \"röm.\",\n \"u.\",\n \"U.\",\n \"Adj.\",\n \"Kap.\",\n \"hpts.\",\n \"a.D.\",\n \"gedr.\",\n \"Best.\",\n \"N.\",\n \"v.u.Z.\",\n \"Phys.\",\n \"Fr.\",\n \"d.J.\",\n \"Reg.-Bez.\",\n \"m.E.\",\n \"schles.\",\n \"Max.\",\n \"Ltd.\",\n \"südd.\",\n \"inkl.\",\n \"geb.\",\n \"Ggf.\",\n \"Inc.\",\n \"kath.\",\n \"kfm.\",\n \"Nr.\",\n \"Proz.\",\n \"Dim.\",\n \"verw.\",\n \"Reg.\",\n \"Dat.\",\n \"Evtl.\",\n \"led.\",\n \"F.\",\n \"Test.\",\n \"Schr.\",\n \"Do.\",\n \"PIN.\",\n \"Z. Zt.\",\n \"v.Chr.\",\n \"Tägl.\",\n \"s.\",\n \"amtl.\",\n \"Temp.\",\n \"Mind.\",\n \"e.V.\",\n \"Abw.\",\n \"P.M.\",\n \"F.f.\",\n \"a.a.S.\",\n \"Mod.\",\n \"Co.\",\n \"Min.\",\n \"Allg.\",\n \"Geograph.\",\n \"Jr.\",\n \"Urspr.\",\n \"Apr.\",\n \"Z. B.\",\n \"v.H.\",\n \"A.\",\n \"einschl.\",\n \"Trans.\",\n \"zzgl.\",\n \"StR.\",\n \"Fam.\",\n \"I.\",\n \"jhrl.\",\n \"u.a.\",\n \"Ben.\",\n \"o.g.\",\n \"Kfm.\",\n \"Konv.\",\n \"Mi.\",\n \"L.\",\n \"beil.\",\n \"T.\",\n \"Ursprüngl.\",\n \"röm.-kath.\",\n \"Okt.\",\n \"u.ä.\",\n \"Tel.\",\n \"D.\",\n \"Ber.\",\n \"Kop.\",\n \"Mio.\",\n \"Y.\",\n \"U.S.A.\",\n \"v. H.\",\n \"Forts. f.\",\n \"Rep.\",\n \"Hptst.\",\n \"österr.\"\n ],\n \"variables\": {}\n }\n },\n \"el\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [],\n \"variables\": {\n \"$STerm\": \"((?:[!;\\\\?\\\\u037E\\\\u0589\\\\u061D-\\\\u061F\\\\u06D4\\\\u0700-\\\\u0702\\\\u07F9\\\\u0837\\\\u0839\\\\u083D\\\\u083E\\\\u0964\\\\u0965\\\\u104A\\\\u104B\\\\u1362\\\\u1367\\\\u1368\\\\u166E\\\\u1735\\\\u1736\\\\u1803\\\\u1809\\\\u1944\\\\u1945\\\\u1AA8-\\\\u1AAB\\\\u1B5A\\\\u1B5B\\\\u1B5E\\\\u1B5F\\\\u1B7D\\\\u1B7E\\\\u1C3B\\\\u1C3C\\\\u1C7E\\\\u1C7F\\\\u203C\\\\u203D\\\\u2047-\\\\u2049\\\\u2E2E\\\\u2E3C\\\\u2E53\\\\u2E54\\\\u3002\\\\uA4FF\\\\uA60E\\\\uA60F\\\\uA6F3\\\\uA6F7\\\\uA876\\\\uA877\\\\uA8CE\\\\uA8CF\\\\uA92F\\\\uA9C8\\\\uA9C9\\\\uAA5D-\\\\uAA5F\\\\uAAF0\\\\uAAF1\\\\uABEB\\\\uFE56\\\\uFE57\\\\uFF01\\\\uFF1F\\\\uFF61]|\\\\uD802[\\\\uDE56\\\\uDE57]|\\\\uD803[\\\\uDF55-\\\\uDF59\\\\uDF86-\\\\uDF89]|\\\\uD804[\\\\uDC47\\\\uDC48\\\\uDCBE-\\\\uDCC1\\\\uDD41-\\\\uDD43\\\\uDDC5\\\\uDDC6\\\\uDDCD\\\\uDDDE\\\\uDDDF\\\\uDE38\\\\uDE39\\\\uDE3B\\\\uDE3C\\\\uDEA9]|\\\\uD805[\\\\uDC4B\\\\uDC4C\\\\uDDC2\\\\uDDC3\\\\uDDC9-\\\\uDDD7\\\\uDE41\\\\uDE42\\\\uDF3C-\\\\uDF3E]|\\\\uD806[\\\\uDD44\\\\uDD46\\\\uDE42\\\\uDE43\\\\uDE9B\\\\uDE9C]|\\\\uD807[\\\\uDC41\\\\uDC42\\\\uDEF7\\\\uDEF8\\\\uDF43\\\\uDF44]|\\\\uD81A[\\\\uDE6E\\\\uDE6F\\\\uDEF5\\\\uDF37\\\\uDF38\\\\uDF44]|\\\\uD81B\\\\uDE98|\\\\uD82F\\\\uDC9F|\\\\uD836\\\\uDE88)(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\"\n }\n }\n },\n \"en\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"L.P.\",\n \"Alt.\",\n \"Approx.\",\n \"E.G.\",\n \"O.\",\n \"Maj.\",\n \"Misc.\",\n \"P.O.\",\n \"J.D.\",\n \"Jam.\",\n \"Card.\",\n \"Dec.\",\n \"Sept.\",\n \"MR.\",\n \"Long.\",\n \"Hat.\",\n \"G.\",\n \"Link.\",\n \"DC.\",\n \"D.C.\",\n \"M.T.\",\n \"Hz.\",\n \"Mrs.\",\n \"By.\",\n \"Act.\",\n \"Var.\",\n \"N.V.\",\n \"Aug.\",\n \"B.\",\n \"S.A.\",\n \"Up.\",\n \"Job.\",\n \"Num.\",\n \"M.I.T.\",\n \"Ok.\",\n \"Org.\",\n \"Ex.\",\n \"Cont.\",\n \"U.\",\n \"Mart.\",\n \"Fn.\",\n \"Abs.\",\n \"Lt.\",\n \"OK.\",\n \"Z.\",\n \"E.\",\n \"Kb.\",\n \"Est.\",\n \"A.M.\",\n \"L.A.\",\n \"Prof.\",\n \"U.S.\",\n \"Nov.\",\n \"Ph.D.\",\n \"Mar.\",\n \"I.T.\",\n \"exec.\",\n \"Jan.\",\n \"N.Y.\",\n \"X.\",\n \"Md.\",\n \"Op.\",\n \"vs.\",\n \"D.A.\",\n \"A.D.\",\n \"R.L.\",\n \"P.M.\",\n \"Or.\",\n \"M.R.\",\n \"Cap.\",\n \"PC.\",\n \"Feb.\",\n \"Exec.\",\n \"I.e.\",\n \"Sep.\",\n \"Gb.\",\n \"K.\",\n \"U.S.C.\",\n \"Mt.\",\n \"S.\",\n \"A.S.\",\n \"C.O.D.\",\n \"Capt.\",\n \"Col.\",\n \"In.\",\n \"C.F.\",\n \"Adj.\",\n \"AD.\",\n \"I.D.\",\n \"Mgr.\",\n \"R.T.\",\n \"B.V.\",\n \"M.\",\n \"Conn.\",\n \"Yr.\",\n \"Rev.\",\n \"Phys.\",\n \"pp.\",\n \"Ms.\",\n \"To.\",\n \"Sgt.\",\n \"J.K.\",\n \"Nr.\",\n \"Jun.\",\n \"Fri.\",\n \"S.A.R.\",\n \"Lev.\",\n \"Lt.Cdr.\",\n \"Def.\",\n \"F.\",\n \"Do.\",\n \"Joe.\",\n \"Id.\",\n \"Mr.\",\n \"Dept.\",\n \"Is.\",\n \"Pvt.\",\n \"Diff.\",\n \"Hon.B.A.\",\n \"Q.\",\n \"Mb.\",\n \"On.\",\n \"Min.\",\n \"J.B.\",\n \"Ed.\",\n \"AB.\",\n \"A.\",\n \"S.p.A.\",\n \"I.\",\n \"a.m.\",\n \"Comm.\",\n \"Go.\",\n \"VS.\",\n \"L.\",\n \"All.\",\n \"PP.\",\n \"P.V.\",\n \"T.\",\n \"K.R.\",\n \"Etc.\",\n \"D.\",\n \"Adv.\",\n \"Lib.\",\n \"E.g.\",\n \"Pro.\",\n \"U.S.A.\",\n \"S.E.\",\n \"AA.\",\n \"Rep.\",\n \"Sq.\",\n \"As.\"\n ],\n \"variables\": {}\n }\n },\n \"es\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"Rdos.\",\n \"JJ.OO.\",\n \"Sres.\",\n \"fig.\",\n \"may.\",\n \"RR.HH.\",\n \"oct.\",\n \"cap.\",\n \"mié.\",\n \"doc.\",\n \"Excmo.\",\n \"Trab.\",\n \"Excmos.\",\n \"Kit.\",\n \"Inc.\",\n \"FF.CC.\",\n \"DC.\",\n \"ago.\",\n \"trad.\",\n \"SA.\",\n \"Rvdos.\",\n \"ed.\",\n \"Exmo.\",\n \"jul.\",\n \"col.\",\n \"RAM.\",\n \"Srtas.\",\n \"ene.\",\n \"Rol.\",\n \"Fabric.\",\n \"Comm.\",\n \"vid.\",\n \"Da.\",\n \"dic.\",\n \"ss.\",\n \"abr.\",\n \"ntra.\",\n \"Sra.\",\n \"dtor.\",\n \"cf.\",\n \"dom.\",\n \"prov.\",\n \"Emm.\",\n \"Sr.\",\n \"licdo.\",\n \"p.ej.\",\n \"bol.\",\n \"figs.\",\n \"Vda.\",\n \"Dr.\",\n \"ntro.\",\n \"Desv.\",\n \"O.M.\",\n \"Ldo.\",\n \"Drs.\",\n \"sáb.\",\n \"feb.\",\n \"Ltda.\",\n \"Lcda.\",\n \"Exma.\",\n \"C.V.\",\n \"SS.MM.\",\n \"Lda.\",\n \"U.S.\",\n \"hnos.\",\n \"R.D.\",\n \"Korn.\",\n \"v.gr.\",\n \"vs.\",\n \"Ilmas.\",\n \"Rdo.\",\n \"ej.\",\n \"vie.\",\n \"jue.\",\n \"a. C.\",\n \"Ilmos.\",\n \"e. c.\",\n \"Excma.\",\n \"afma.\",\n \"licda.\",\n \"Em.\",\n \"K.\",\n \"sras.\",\n \"MM.\",\n \"fund.\",\n \"Mons.\",\n \"Lcdo.\",\n \"afmo.\",\n \"C.\",\n \"A.C.\",\n \"dptos.\",\n \"Col.\",\n \"Srta.\",\n \"Av.\",\n \"Ant.\",\n \"depto.\",\n \"Var.\",\n \"H.P.\",\n \"D.\",\n \"M.\",\n \"C.P.\",\n \"Rev.\",\n \"Rvdmos.\",\n \"Fr.\",\n \"Ilmo.\",\n \"afmos.\",\n \"Ltd.\",\n \"afmas.\",\n \"prof.\",\n \"lun.\",\n \"SS.AA.\",\n \"Sol.\",\n \"nov.\",\n \"mss.\",\n \"Dña.\",\n \"Seg.\",\n \"mar.\",\n \"Rvdmo.\",\n \"Reg.\",\n \"ms.\",\n \"Sras.\",\n \"sres.\",\n \"U.S.A.\",\n \"Sta.\",\n \"Sdad.\",\n \"Dra.\",\n \"srs.\",\n \"R.U.\",\n \"deptos.\",\n \"dpto.\",\n \"jun.\",\n \"bco.\",\n \"Cía.\",\n \"Id.\",\n \"Mr.\",\n \"e.g.\",\n \"C.S.\",\n \"Excmas.\",\n \"Dª.\",\n \"Rvdo.\",\n \"Lic.\",\n \"cfr.\",\n \"Corp.\",\n \"Dto.\",\n \"Ilma.\",\n \"L.\",\n \"All.\",\n \"PP.\",\n \"d. C.\",\n \"Ltdo.\",\n \"mtro.\",\n \"Mrs.\",\n \"Desc.\",\n \"Avda.\",\n \"Exmas.\",\n \"a. e. c.\",\n \"Bien.\",\n \"Exmos.\",\n \"AA.\",\n \"Sto.\",\n \"CA.\",\n \"sept.\",\n \"Exc.\",\n \"c/c.\"\n ],\n \"variables\": {}\n }\n },\n \"fr\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"aux.\",\n \"config.\",\n \"collab.\",\n \"M.\",\n \"dim.\",\n \"imprim.\",\n \"oct.\",\n \"syst.\",\n \"bull.\",\n \"MM.\",\n \"doc.\",\n \"P.O.\",\n \"hôp.\",\n \"Mart.\",\n \"juil.\",\n \"broch.\",\n \"adr.\",\n \"symb.\",\n \"C.\",\n \"anc.\",\n \"voit.\",\n \"Jr.\",\n \"graph.\",\n \"dir.\",\n \"éd.\",\n \"fig.\",\n \"édit.\",\n \"niv.\",\n \"quart.\",\n \"cam.\",\n \"éval.\",\n \"anon.\",\n \"réf.\",\n \"Comm.\",\n \"Prof.\",\n \"févr.\",\n \"indus.\",\n \"DC.\",\n \"équiv.\",\n \"illustr.\",\n \"acoust.\",\n \"nov.\",\n \"L.\",\n \"All.\",\n \"U.S.\",\n \"S.M.A.R.T.\",\n \"sept.\",\n \"avr.\",\n \"jeu.\",\n \"dest.\",\n \"P.-D. G.\",\n \"ill.\",\n \"coll.\",\n \"encycl.\",\n \"mer.\",\n \"Desc.\",\n \"ven.\",\n \"P.\",\n \"lun.\",\n \"Inc.\",\n \"sam.\",\n \"D.\",\n \"append.\",\n \"Var.\",\n \"categ.\",\n \"janv.\",\n \"S.A.\",\n \"imm.\",\n \"U.S.A.\",\n \"mar.\",\n \"exempl.\",\n \"déc.\",\n \"ann.\",\n \"U.\",\n \"synth.\",\n \"dict.\",\n \"av. J.-C.\",\n \"W.\",\n \"Op.\",\n \"ap. J.-C.\",\n \"gouv.\",\n \"trav. publ.\"\n ],\n \"variables\": {}\n }\n },\n \"it\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"N.B.\",\n \"div.\",\n \"a.C.\",\n \"fig.\",\n \"d.p.R.\",\n \"c.c.p.\",\n \"Cfr.\",\n \"vol.\",\n \"Geom.\",\n \"O.d.G.\",\n \"S.p.A.\",\n \"ver.\",\n \"N.d.A.\",\n \"dott.\",\n \"arch.\",\n \"d.C.\",\n \"N.d.T.\",\n \"rag.\",\n \"Sig.\",\n \"Mod.\",\n \"pag.\",\n \"dr.\",\n \"tav.\",\n \"N.d.E.\",\n \"DC.\",\n \"mitt.\",\n \"Ing.\",\n \"int.\",\n \"on.\",\n \"C.P.\",\n \"ag.\",\n \"L.\",\n \"U.S.\",\n \"S.M.A.R.T.\",\n \"p.i.\",\n \"tab.\",\n \"Ltd.\",\n \"Liv.\",\n \"D.\",\n \"U.S.A.\",\n \"sez.\",\n \"avv.\",\n \"S.A.R.\",\n \"all.\",\n \"p.\"\n ],\n \"variables\": {}\n }\n },\n \"ja\": {\n \"word\": {\n \"segmentRules\": {\n \"13.3\": {\n \"after\": \"$Hiragana\",\n \"before\": \"$Hiragana\",\n \"breaks\": false\n },\n \"13.4\": {\n \"after\": \"$Ideographic\",\n \"before\": \"$Ideographic\",\n \"breaks\": false\n }\n },\n \"suppressions\": [],\n \"variables\": {\n \"$Hiragana\": \"((?:[\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F]|\\\\uD82C[\\\\uDC01-\\\\uDD1F\\\\uDD32\\\\uDD50-\\\\uDD52]|\\\\uD83C\\\\uDE00)(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Ideographic\": \"((?:[\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3038-\\\\u303B\\\\u3400-\\\\u4DBF\\\\u4E00-\\\\u9FFF\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9]|\\\\uD81B\\\\uDFE4|[\\\\uD81C-\\\\uD820\\\\uD822\\\\uD840-\\\\uD868\\\\uD86A-\\\\uD86C\\\\uD86F-\\\\uD872\\\\uD874-\\\\uD879\\\\uD880-\\\\uD883\\\\uD885-\\\\uD887][\\\\uDC00-\\\\uDFFF]|\\\\uD821[\\\\uDC00-\\\\uDFF7]|\\\\uD823[\\\\uDC00-\\\\uDCD5\\\\uDD00-\\\\uDD08]|\\\\uD82C[\\\\uDD70-\\\\uDEFB]|\\\\uD869[\\\\uDC00-\\\\uDEDF\\\\uDF00-\\\\uDFFF]|\\\\uD86D[\\\\uDC00-\\\\uDF39\\\\uDF40-\\\\uDFFF]|\\\\uD86E[\\\\uDC00-\\\\uDC1D\\\\uDC20-\\\\uDFFF]|\\\\uD873[\\\\uDC00-\\\\uDEA1\\\\uDEB0-\\\\uDFFF]|\\\\uD87A[\\\\uDC00-\\\\uDFE0]|\\\\uD87E[\\\\uDC00-\\\\uDE1D]|\\\\uD884[\\\\uDC00-\\\\uDF4A\\\\uDF50-\\\\uDFFF]|\\\\uD888[\\\\uDC00-\\\\uDFAF])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\"\n }\n }\n },\n \"pt\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"psicol.\",\n \"fig.\",\n \"compl.\",\n \"rep.\",\n \"cap.\",\n \"doc.\",\n \"fisiol.\",\n \"dipl.\",\n \"astron.\",\n \"port.\",\n \"eletrôn.\",\n \"geom.\",\n \"mov.\",\n \"ago.\",\n \"trad.\",\n \"arquit.\",\n \"dez.\",\n \"ed.\",\n \"apt.\",\n \"Exmo.\",\n \"col.\",\n \"ff.\",\n \"univ.\",\n \"res.\",\n \"R.\",\n \"transp.\",\n \"D.C\",\n \"l.\",\n \"des.\",\n \"fev.\",\n \"abr.\",\n \"liter.\",\n \"lat.\",\n \"Dir.\",\n \"cf.\",\n \"adm.\",\n \"fot.\",\n \"p.m.\",\n \"P.M.\",\n \"créd.\",\n \"jur.\",\n \"com.\",\n \"anat.\",\n \"dir.\",\n \"end.\",\n \"fís.\",\n \"E.\",\n \"Est.\",\n \"cont.\",\n \"matem.\",\n \"Drs.\",\n \"gên.\",\n \"neol.\",\n \"pág.\",\n \"índ.\",\n \"Ltda.\",\n \"Exma.\",\n \"esp.\",\n \"ingl.\",\n \"tecnol.\",\n \"Mar.\",\n \"símb.\",\n \"Pe.\",\n \"pal.\",\n \"filos.\",\n \"V.T.\",\n \"fasc.\",\n \"vs.\",\n \"mai.\",\n \"S.A.\",\n \"profa.\",\n \"N.Sra.\",\n \"r.s.v.p.\",\n \"cel.\",\n \"mat.\",\n \"abrev.\",\n \"out.\",\n \"long.\",\n \"aux.\",\n \"arit.\",\n \"aer.\",\n \"jul.\",\n \"lin.\",\n \"S.\",\n \"méd.\",\n \"odontol.\",\n \"org.\",\n \"A.C.\",\n \"jun.\",\n \"déb.\",\n \"Av.\",\n \"álg.\",\n \"sup.\",\n \"fl.\",\n \"odont.\",\n \"caps.\",\n \"relat.\",\n \"organiz.\",\n \"hist.\",\n \"Fr.\",\n \"Ilmo.\",\n \"fem.\",\n \"ap.\",\n \"Ltd.\",\n \"pol.\",\n \"séc.\",\n \"prof.\",\n \"cx.\",\n \"nov.\",\n \"quím.\",\n \"mús.\",\n \"agric.\",\n \"mar.\",\n \"W.C.\",\n \"fr.\",\n \"cat.\",\n \"jan.\",\n \"pron.\",\n \"rel.\",\n \"autom.\",\n \"Sta.\",\n \"Dra.\",\n \"p.\",\n \"tel.\",\n \"div.\",\n \"p. ex.\",\n \"a.C.\",\n \"bras.\",\n \"Alm.\",\n \"Dr.\",\n \"comp.\",\n \"pq.\",\n \"arqueol.\",\n \"náut.\",\n \"biogr.\",\n \"f.\",\n \"círc.\",\n \"fac.\",\n \"d.C.\",\n \"apart.\",\n \"ex.\",\n \"Jr.\",\n \"set.\",\n \"tec.\",\n \"sociol.\",\n \"gram.\",\n \"ind.\",\n \"Ilma.\",\n \"vol.\",\n \"eng.\",\n \"rod.\",\n \"Ph.D.\",\n \"Dras.\",\n \"pp.\",\n \"elem.\",\n \"máq.\",\n \"cód.\",\n \"eletr.\",\n \"prod.\",\n \"ref.\",\n \"fil.\",\n \"a.m.\",\n \"A.M\",\n \"obs.\",\n \"N.T.\",\n \"contab.\",\n \"Sto.\",\n \"lit.\",\n \"educ.\",\n \"rementente\",\n \"desc.\",\n \"próx.\"\n ],\n \"variables\": {}\n }\n },\n \"root\": {\n \"grapheme\": {\n \"segmentRules\": {\n \"11\": {\n \"after\": \"$ExtPict\",\n \"before\": \"$ExtPict$Extend*$ZWJ\",\n \"breaks\": false\n },\n \"12\": {\n \"after\": \"$RI\",\n \"before\": \"^($RI$RI)*$RI\",\n \"breaks\": false\n },\n \"13\": {\n \"after\": \"$RI\",\n \"before\": \"[^\\\\uDDE6-\\\\uDDFF]($RI$RI)*$RI\",\n \"breaks\": false\n },\n \"3\": {\n \"after\": \"$LF\",\n \"before\": \"$CR\",\n \"breaks\": false\n },\n \"4\": {\n \"before\": \"($Control|$CR|$LF)\",\n \"breaks\": true\n },\n \"5\": {\n \"after\": \"($Control|$CR|$LF)\",\n \"breaks\": true\n },\n \"6\": {\n \"after\": \"($L|$V|$LV|$LVT)\",\n \"before\": \"$L\",\n \"breaks\": false\n },\n \"7\": {\n \"after\": \"($V|$T)\",\n \"before\": \"($LV|$V)\",\n \"breaks\": false\n },\n \"8\": {\n \"after\": \"$T\",\n \"before\": \"($LVT|$T)\",\n \"breaks\": false\n },\n \"9\": {\n \"after\": \"($Extend|$ZWJ)\",\n \"breaks\": false\n },\n \"9.1\": {\n \"after\": \"$SpacingMark\",\n \"breaks\": false\n },\n \"9.2\": {\n \"before\": \"$Prepend\",\n \"breaks\": false\n },\n \"9.3\": {\n \"after\": \"$LinkingConsonant\",\n \"before\": \"$LinkingConsonant$ExtCccZwj*$Virama$ExtCccZwj*\",\n \"breaks\": false\n }\n },\n \"suppressions\": [],\n \"variables\": {\n \"$CR\": \"\\\\r\",\n \"$Control\": \"(?:[\\\\0-\\\\t\\\\x0B\\\\f\\\\x0E-\\\\x1F\\\\x7F-\\\\x9F\\\\xAD\\\\u061C\\\\u180E\\\\u200B\\\\u200E\\\\u200F\\\\u2028-\\\\u202E\\\\u2060-\\\\u206F\\\\uFEFF\\\\uFFF0-\\\\uFFFB]|\\\\uD80D[\\\\uDC30-\\\\uDC3F]|\\\\uD82F[\\\\uDCA0-\\\\uDCA3]|\\\\uD834[\\\\uDD73-\\\\uDD7A]|\\\\uDB40[\\\\uDC00-\\\\uDC1F\\\\uDC80-\\\\uDCFF\\\\uDDF0-\\\\uDFFF]|[\\\\uDB41-\\\\uDB43][\\\\uDC00-\\\\uDFFF])\",\n \"$ExtCccZwj\": \"(?:[\\\\u0300-\\\\u034E\\\\u0350-\\\\u036F\\\\u0483-\\\\u0487\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0610-\\\\u061A\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DC\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u0711\\\\u0730-\\\\u074A\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0898-\\\\u089F\\\\u08CA-\\\\u08E1\\\\u08E3-\\\\u08FF\\\\u093C\\\\u094D\\\\u0951-\\\\u0954\\\\u09BC\\\\u09CD\\\\u09FE\\\\u0A3C\\\\u0A4D\\\\u0ABC\\\\u0ACD\\\\u0B3C\\\\u0B4D\\\\u0BCD\\\\u0C3C\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0CBC\\\\u0CCD\\\\u0D3B\\\\u0D3C\\\\u0D4D\\\\u0DCA\\\\u0E38-\\\\u0E3A\\\\u0E48-\\\\u0E4B\\\\u0EB8-\\\\u0EBA\\\\u0EC8-\\\\u0ECB\\\\u0F18\\\\u0F19\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F71\\\\u0F72\\\\u0F74\\\\u0F7A-\\\\u0F7D\\\\u0F80\\\\u0F82-\\\\u0F84\\\\u0F86\\\\u0F87\\\\u0FC6\\\\u1037\\\\u1039\\\\u103A\\\\u108D\\\\u135D-\\\\u135F\\\\u1714\\\\u17D2\\\\u17DD\\\\u18A9\\\\u1939-\\\\u193B\\\\u1A17\\\\u1A18\\\\u1A60\\\\u1A75-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ABD\\\\u1ABF-\\\\u1ACE\\\\u1B34\\\\u1B6B-\\\\u1B73\\\\u1BAB\\\\u1BE6\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE0\\\\u1CE2-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF8\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200D\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA806\\\\uA82C\\\\uA8C4\\\\uA8E0-\\\\uA8F1\\\\uA92B-\\\\uA92D\\\\uA9B3\\\\uAAB0\\\\uAAB2-\\\\uAAB4\\\\uAAB7\\\\uAAB8\\\\uAABE\\\\uAABF\\\\uAAC1\\\\uAAF6\\\\uABED\\\\uFB1E\\\\uFE20-\\\\uFE2F]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE0D\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC46\\\\uDC70\\\\uDC7F\\\\uDCB9\\\\uDCBA\\\\uDD00-\\\\uDD02\\\\uDD33\\\\uDD34\\\\uDD73\\\\uDDCA\\\\uDE36\\\\uDEE9\\\\uDEEA\\\\uDF3B\\\\uDF3C\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC42\\\\uDC46\\\\uDC5E\\\\uDCC2\\\\uDCC3\\\\uDDBF\\\\uDDC0\\\\uDE3F\\\\uDEB7\\\\uDF2B]|\\\\uD806[\\\\uDC39\\\\uDC3A\\\\uDD3E\\\\uDD43\\\\uDDE0\\\\uDE34\\\\uDE47\\\\uDE99]|\\\\uD807[\\\\uDC3F\\\\uDD42\\\\uDD44\\\\uDD45\\\\uDD97\\\\uDF42]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD82F\\\\uDC9E|\\\\uD834[\\\\uDD65\\\\uDD67-\\\\uDD69\\\\uDD6E-\\\\uDD72\\\\uDD7B-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A])\",\n \"$ExtPict\": \"(?:[\\\\xA9\\\\xAE\\\\u203C\\\\u2049\\\\u2122\\\\u2139\\\\u2194-\\\\u2199\\\\u21A9\\\\u21AA\\\\u231A\\\\u231B\\\\u2328\\\\u2388\\\\u23CF\\\\u23E9-\\\\u23F3\\\\u23F8-\\\\u23FA\\\\u24C2\\\\u25AA\\\\u25AB\\\\u25B6\\\\u25C0\\\\u25FB-\\\\u25FE\\\\u2600-\\\\u2605\\\\u2607-\\\\u2612\\\\u2614-\\\\u2685\\\\u2690-\\\\u2705\\\\u2708-\\\\u2712\\\\u2714\\\\u2716\\\\u271D\\\\u2721\\\\u2728\\\\u2733\\\\u2734\\\\u2744\\\\u2747\\\\u274C\\\\u274E\\\\u2753-\\\\u2755\\\\u2757\\\\u2763-\\\\u2767\\\\u2795-\\\\u2797\\\\u27A1\\\\u27B0\\\\u27BF\\\\u2934\\\\u2935\\\\u2B05-\\\\u2B07\\\\u2B1B\\\\u2B1C\\\\u2B50\\\\u2B55\\\\u3030\\\\u303D\\\\u3297\\\\u3299]|\\\\uD83C[\\\\uDC00-\\\\uDCFF\\\\uDD0D-\\\\uDD0F\\\\uDD2F\\\\uDD6C-\\\\uDD71\\\\uDD7E\\\\uDD7F\\\\uDD8E\\\\uDD91-\\\\uDD9A\\\\uDDAD-\\\\uDDE5\\\\uDE01-\\\\uDE0F\\\\uDE1A\\\\uDE2F\\\\uDE32-\\\\uDE3A\\\\uDE3C-\\\\uDE3F\\\\uDE49-\\\\uDFFA]|\\\\uD83D[\\\\uDC00-\\\\uDD3D\\\\uDD46-\\\\uDE4F\\\\uDE80-\\\\uDEFF\\\\uDF74-\\\\uDF7F\\\\uDFD5-\\\\uDFFF]|\\\\uD83E[\\\\uDC0C-\\\\uDC0F\\\\uDC48-\\\\uDC4F\\\\uDC5A-\\\\uDC5F\\\\uDC88-\\\\uDC8F\\\\uDCAE-\\\\uDCFF\\\\uDD0C-\\\\uDD3A\\\\uDD3C-\\\\uDD45\\\\uDD47-\\\\uDEFF]|\\\\uD83F[\\\\uDC00-\\\\uDFFD])\",\n \"$Extend\": \"(?:[\\\\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\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0898-\\\\u089F\\\\u08CA-\\\\u08E1\\\\u08E3-\\\\u0902\\\\u093A\\\\u093C\\\\u0941-\\\\u0948\\\\u094D\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981\\\\u09BC\\\\u09BE\\\\u09C1-\\\\u09C4\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01\\\\u0A02\\\\u0A3C\\\\u0A41\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81\\\\u0A82\\\\u0ABC\\\\u0AC1-\\\\u0AC5\\\\u0AC7\\\\u0AC8\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01\\\\u0B3C\\\\u0B3E\\\\u0B3F\\\\u0B41-\\\\u0B44\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE\\\\u0BC0\\\\u0BCD\\\\u0BD7\\\\u0C00\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C40\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81\\\\u0CBC\\\\u0CBF\\\\u0CC2\\\\u0CC6\\\\u0CCC\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0D00\\\\u0D01\\\\u0D3B\\\\u0D3C\\\\u0D3E\\\\u0D41-\\\\u0D44\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81\\\\u0DCA\\\\u0DCF\\\\u0DD2-\\\\u0DD4\\\\u0DD6\\\\u0DDF\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\u0F18\\\\u0F19\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F71-\\\\u0F7E\\\\u0F80-\\\\u0F84\\\\u0F86\\\\u0F87\\\\u0F8D-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u102D-\\\\u1030\\\\u1032-\\\\u1037\\\\u1039\\\\u103A\\\\u103D\\\\u103E\\\\u1058\\\\u1059\\\\u105E-\\\\u1060\\\\u1071-\\\\u1074\\\\u1082\\\\u1085\\\\u1086\\\\u108D\\\\u109D\\\\u135D-\\\\u135F\\\\u1712-\\\\u1714\\\\u1732\\\\u1733\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4\\\\u17B5\\\\u17B7-\\\\u17BD\\\\u17C6\\\\u17C9-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u1922\\\\u1927\\\\u1928\\\\u1932\\\\u1939-\\\\u193B\\\\u1A17\\\\u1A18\\\\u1A1B\\\\u1A56\\\\u1A58-\\\\u1A5E\\\\u1A60\\\\u1A62\\\\u1A65-\\\\u1A6C\\\\u1A73-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B03\\\\u1B34-\\\\u1B3A\\\\u1B3C\\\\u1B42\\\\u1B6B-\\\\u1B73\\\\u1B80\\\\u1B81\\\\u1BA2-\\\\u1BA5\\\\u1BA8\\\\u1BA9\\\\u1BAB-\\\\u1BAD\\\\u1BE6\\\\u1BE8\\\\u1BE9\\\\u1BED\\\\u1BEF-\\\\u1BF1\\\\u1C2C-\\\\u1C33\\\\u1C36\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE0\\\\u1CE2-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF8\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA825\\\\uA826\\\\uA82C\\\\uA8C4\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\uA926-\\\\uA92D\\\\uA947-\\\\uA951\\\\uA980-\\\\uA982\\\\uA9B3\\\\uA9B6-\\\\uA9B9\\\\uA9BC\\\\uA9BD\\\\uA9E5\\\\uAA29-\\\\uAA2E\\\\uAA31\\\\uAA32\\\\uAA35\\\\uAA36\\\\uAA43\\\\uAA4C\\\\uAA7C\\\\uAAB0\\\\uAAB2-\\\\uAAB4\\\\uAAB7\\\\uAAB8\\\\uAABE\\\\uAABF\\\\uAAC1\\\\uAAEC\\\\uAAED\\\\uAAF6\\\\uABE5\\\\uABE8\\\\uABED\\\\uFB1E\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2F\\\\uFF9E\\\\uFF9F]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC01\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC81\\\\uDCB3-\\\\uDCB6\\\\uDCB9\\\\uDCBA\\\\uDCC2\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD2B\\\\uDD2D-\\\\uDD34\\\\uDD73\\\\uDD80\\\\uDD81\\\\uDDB6-\\\\uDDBE\\\\uDDC9-\\\\uDDCC\\\\uDDCF\\\\uDE2F-\\\\uDE31\\\\uDE34\\\\uDE36\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF\\\\uDEE3-\\\\uDEEA\\\\uDF00\\\\uDF01\\\\uDF3B\\\\uDF3C\\\\uDF3E\\\\uDF40\\\\uDF57\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC38-\\\\uDC3F\\\\uDC42-\\\\uDC44\\\\uDC46\\\\uDC5E\\\\uDCB0\\\\uDCB3-\\\\uDCB8\\\\uDCBA\\\\uDCBD\\\\uDCBF\\\\uDCC0\\\\uDCC2\\\\uDCC3\\\\uDDAF\\\\uDDB2-\\\\uDDB5\\\\uDDBC\\\\uDDBD\\\\uDDBF\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE33-\\\\uDE3A\\\\uDE3D\\\\uDE3F\\\\uDE40\\\\uDEAB\\\\uDEAD\\\\uDEB0-\\\\uDEB5\\\\uDEB7\\\\uDF1D-\\\\uDF1F\\\\uDF22-\\\\uDF25\\\\uDF27-\\\\uDF2B]|\\\\uD806[\\\\uDC2F-\\\\uDC37\\\\uDC39\\\\uDC3A\\\\uDD30\\\\uDD3B\\\\uDD3C\\\\uDD3E\\\\uDD43\\\\uDDD4-\\\\uDDD7\\\\uDDDA\\\\uDDDB\\\\uDDE0\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE38\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE56\\\\uDE59-\\\\uDE5B\\\\uDE8A-\\\\uDE96\\\\uDE98\\\\uDE99]|\\\\uD807[\\\\uDC30-\\\\uDC36\\\\uDC38-\\\\uDC3D\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCAA-\\\\uDCB0\\\\uDCB2\\\\uDCB3\\\\uDCB5\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD90\\\\uDD91\\\\uDD95\\\\uDD97\\\\uDEF3\\\\uDEF4\\\\uDF00\\\\uDF01\\\\uDF36-\\\\uDF3A\\\\uDF40\\\\uDF42]|\\\\uD80D[\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF8F-\\\\uDF92\\\\uDFE4]|\\\\uD82F[\\\\uDC9D\\\\uDC9E]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65\\\\uDD67-\\\\uDD69\\\\uDD6E-\\\\uDD72\\\\uDD7B-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$L\": \"[\\\\u1100-\\\\u115F\\\\uA960-\\\\uA97C]\",\n \"$LF\": \"\\\\n\",\n \"$LV\": \"[\\\\uAC00\\\\uAC1C\\\\uAC38\\\\uAC54\\\\uAC70\\\\uAC8C\\\\uACA8\\\\uACC4\\\\uACE0\\\\uACFC\\\\uAD18\\\\uAD34\\\\uAD50\\\\uAD6C\\\\uAD88\\\\uADA4\\\\uADC0\\\\uADDC\\\\uADF8\\\\uAE14\\\\uAE30\\\\uAE4C\\\\uAE68\\\\uAE84\\\\uAEA0\\\\uAEBC\\\\uAED8\\\\uAEF4\\\\uAF10\\\\uAF2C\\\\uAF48\\\\uAF64\\\\uAF80\\\\uAF9C\\\\uAFB8\\\\uAFD4\\\\uAFF0\\\\uB00C\\\\uB028\\\\uB044\\\\uB060\\\\uB07C\\\\uB098\\\\uB0B4\\\\uB0D0\\\\uB0EC\\\\uB108\\\\uB124\\\\uB140\\\\uB15C\\\\uB178\\\\uB194\\\\uB1B0\\\\uB1CC\\\\uB1E8\\\\uB204\\\\uB220\\\\uB23C\\\\uB258\\\\uB274\\\\uB290\\\\uB2AC\\\\uB2C8\\\\uB2E4\\\\uB300\\\\uB31C\\\\uB338\\\\uB354\\\\uB370\\\\uB38C\\\\uB3A8\\\\uB3C4\\\\uB3E0\\\\uB3FC\\\\uB418\\\\uB434\\\\uB450\\\\uB46C\\\\uB488\\\\uB4A4\\\\uB4C0\\\\uB4DC\\\\uB4F8\\\\uB514\\\\uB530\\\\uB54C\\\\uB568\\\\uB584\\\\uB5A0\\\\uB5BC\\\\uB5D8\\\\uB5F4\\\\uB610\\\\uB62C\\\\uB648\\\\uB664\\\\uB680\\\\uB69C\\\\uB6B8\\\\uB6D4\\\\uB6F0\\\\uB70C\\\\uB728\\\\uB744\\\\uB760\\\\uB77C\\\\uB798\\\\uB7B4\\\\uB7D0\\\\uB7EC\\\\uB808\\\\uB824\\\\uB840\\\\uB85C\\\\uB878\\\\uB894\\\\uB8B0\\\\uB8CC\\\\uB8E8\\\\uB904\\\\uB920\\\\uB93C\\\\uB958\\\\uB974\\\\uB990\\\\uB9AC\\\\uB9C8\\\\uB9E4\\\\uBA00\\\\uBA1C\\\\uBA38\\\\uBA54\\\\uBA70\\\\uBA8C\\\\uBAA8\\\\uBAC4\\\\uBAE0\\\\uBAFC\\\\uBB18\\\\uBB34\\\\uBB50\\\\uBB6C\\\\uBB88\\\\uBBA4\\\\uBBC0\\\\uBBDC\\\\uBBF8\\\\uBC14\\\\uBC30\\\\uBC4C\\\\uBC68\\\\uBC84\\\\uBCA0\\\\uBCBC\\\\uBCD8\\\\uBCF4\\\\uBD10\\\\uBD2C\\\\uBD48\\\\uBD64\\\\uBD80\\\\uBD9C\\\\uBDB8\\\\uBDD4\\\\uBDF0\\\\uBE0C\\\\uBE28\\\\uBE44\\\\uBE60\\\\uBE7C\\\\uBE98\\\\uBEB4\\\\uBED0\\\\uBEEC\\\\uBF08\\\\uBF24\\\\uBF40\\\\uBF5C\\\\uBF78\\\\uBF94\\\\uBFB0\\\\uBFCC\\\\uBFE8\\\\uC004\\\\uC020\\\\uC03C\\\\uC058\\\\uC074\\\\uC090\\\\uC0AC\\\\uC0C8\\\\uC0E4\\\\uC100\\\\uC11C\\\\uC138\\\\uC154\\\\uC170\\\\uC18C\\\\uC1A8\\\\uC1C4\\\\uC1E0\\\\uC1FC\\\\uC218\\\\uC234\\\\uC250\\\\uC26C\\\\uC288\\\\uC2A4\\\\uC2C0\\\\uC2DC\\\\uC2F8\\\\uC314\\\\uC330\\\\uC34C\\\\uC368\\\\uC384\\\\uC3A0\\\\uC3BC\\\\uC3D8\\\\uC3F4\\\\uC410\\\\uC42C\\\\uC448\\\\uC464\\\\uC480\\\\uC49C\\\\uC4B8\\\\uC4D4\\\\uC4F0\\\\uC50C\\\\uC528\\\\uC544\\\\uC560\\\\uC57C\\\\uC598\\\\uC5B4\\\\uC5D0\\\\uC5EC\\\\uC608\\\\uC624\\\\uC640\\\\uC65C\\\\uC678\\\\uC694\\\\uC6B0\\\\uC6CC\\\\uC6E8\\\\uC704\\\\uC720\\\\uC73C\\\\uC758\\\\uC774\\\\uC790\\\\uC7AC\\\\uC7C8\\\\uC7E4\\\\uC800\\\\uC81C\\\\uC838\\\\uC854\\\\uC870\\\\uC88C\\\\uC8A8\\\\uC8C4\\\\uC8E0\\\\uC8FC\\\\uC918\\\\uC934\\\\uC950\\\\uC96C\\\\uC988\\\\uC9A4\\\\uC9C0\\\\uC9DC\\\\uC9F8\\\\uCA14\\\\uCA30\\\\uCA4C\\\\uCA68\\\\uCA84\\\\uCAA0\\\\uCABC\\\\uCAD8\\\\uCAF4\\\\uCB10\\\\uCB2C\\\\uCB48\\\\uCB64\\\\uCB80\\\\uCB9C\\\\uCBB8\\\\uCBD4\\\\uCBF0\\\\uCC0C\\\\uCC28\\\\uCC44\\\\uCC60\\\\uCC7C\\\\uCC98\\\\uCCB4\\\\uCCD0\\\\uCCEC\\\\uCD08\\\\uCD24\\\\uCD40\\\\uCD5C\\\\uCD78\\\\uCD94\\\\uCDB0\\\\uCDCC\\\\uCDE8\\\\uCE04\\\\uCE20\\\\uCE3C\\\\uCE58\\\\uCE74\\\\uCE90\\\\uCEAC\\\\uCEC8\\\\uCEE4\\\\uCF00\\\\uCF1C\\\\uCF38\\\\uCF54\\\\uCF70\\\\uCF8C\\\\uCFA8\\\\uCFC4\\\\uCFE0\\\\uCFFC\\\\uD018\\\\uD034\\\\uD050\\\\uD06C\\\\uD088\\\\uD0A4\\\\uD0C0\\\\uD0DC\\\\uD0F8\\\\uD114\\\\uD130\\\\uD14C\\\\uD168\\\\uD184\\\\uD1A0\\\\uD1BC\\\\uD1D8\\\\uD1F4\\\\uD210\\\\uD22C\\\\uD248\\\\uD264\\\\uD280\\\\uD29C\\\\uD2B8\\\\uD2D4\\\\uD2F0\\\\uD30C\\\\uD328\\\\uD344\\\\uD360\\\\uD37C\\\\uD398\\\\uD3B4\\\\uD3D0\\\\uD3EC\\\\uD408\\\\uD424\\\\uD440\\\\uD45C\\\\uD478\\\\uD494\\\\uD4B0\\\\uD4CC\\\\uD4E8\\\\uD504\\\\uD520\\\\uD53C\\\\uD558\\\\uD574\\\\uD590\\\\uD5AC\\\\uD5C8\\\\uD5E4\\\\uD600\\\\uD61C\\\\uD638\\\\uD654\\\\uD670\\\\uD68C\\\\uD6A8\\\\uD6C4\\\\uD6E0\\\\uD6FC\\\\uD718\\\\uD734\\\\uD750\\\\uD76C\\\\uD788]\",\n \"$LVT\": \"[\\\\uAC01-\\\\uAC1B\\\\uAC1D-\\\\uAC37\\\\uAC39-\\\\uAC53\\\\uAC55-\\\\uAC6F\\\\uAC71-\\\\uAC8B\\\\uAC8D-\\\\uACA7\\\\uACA9-\\\\uACC3\\\\uACC5-\\\\uACDF\\\\uACE1-\\\\uACFB\\\\uACFD-\\\\uAD17\\\\uAD19-\\\\uAD33\\\\uAD35-\\\\uAD4F\\\\uAD51-\\\\uAD6B\\\\uAD6D-\\\\uAD87\\\\uAD89-\\\\uADA3\\\\uADA5-\\\\uADBF\\\\uADC1-\\\\uADDB\\\\uADDD-\\\\uADF7\\\\uADF9-\\\\uAE13\\\\uAE15-\\\\uAE2F\\\\uAE31-\\\\uAE4B\\\\uAE4D-\\\\uAE67\\\\uAE69-\\\\uAE83\\\\uAE85-\\\\uAE9F\\\\uAEA1-\\\\uAEBB\\\\uAEBD-\\\\uAED7\\\\uAED9-\\\\uAEF3\\\\uAEF5-\\\\uAF0F\\\\uAF11-\\\\uAF2B\\\\uAF2D-\\\\uAF47\\\\uAF49-\\\\uAF63\\\\uAF65-\\\\uAF7F\\\\uAF81-\\\\uAF9B\\\\uAF9D-\\\\uAFB7\\\\uAFB9-\\\\uAFD3\\\\uAFD5-\\\\uAFEF\\\\uAFF1-\\\\uB00B\\\\uB00D-\\\\uB027\\\\uB029-\\\\uB043\\\\uB045-\\\\uB05F\\\\uB061-\\\\uB07B\\\\uB07D-\\\\uB097\\\\uB099-\\\\uB0B3\\\\uB0B5-\\\\uB0CF\\\\uB0D1-\\\\uB0EB\\\\uB0ED-\\\\uB107\\\\uB109-\\\\uB123\\\\uB125-\\\\uB13F\\\\uB141-\\\\uB15B\\\\uB15D-\\\\uB177\\\\uB179-\\\\uB193\\\\uB195-\\\\uB1AF\\\\uB1B1-\\\\uB1CB\\\\uB1CD-\\\\uB1E7\\\\uB1E9-\\\\uB203\\\\uB205-\\\\uB21F\\\\uB221-\\\\uB23B\\\\uB23D-\\\\uB257\\\\uB259-\\\\uB273\\\\uB275-\\\\uB28F\\\\uB291-\\\\uB2AB\\\\uB2AD-\\\\uB2C7\\\\uB2C9-\\\\uB2E3\\\\uB2E5-\\\\uB2FF\\\\uB301-\\\\uB31B\\\\uB31D-\\\\uB337\\\\uB339-\\\\uB353\\\\uB355-\\\\uB36F\\\\uB371-\\\\uB38B\\\\uB38D-\\\\uB3A7\\\\uB3A9-\\\\uB3C3\\\\uB3C5-\\\\uB3DF\\\\uB3E1-\\\\uB3FB\\\\uB3FD-\\\\uB417\\\\uB419-\\\\uB433\\\\uB435-\\\\uB44F\\\\uB451-\\\\uB46B\\\\uB46D-\\\\uB487\\\\uB489-\\\\uB4A3\\\\uB4A5-\\\\uB4BF\\\\uB4C1-\\\\uB4DB\\\\uB4DD-\\\\uB4F7\\\\uB4F9-\\\\uB513\\\\uB515-\\\\uB52F\\\\uB531-\\\\uB54B\\\\uB54D-\\\\uB567\\\\uB569-\\\\uB583\\\\uB585-\\\\uB59F\\\\uB5A1-\\\\uB5BB\\\\uB5BD-\\\\uB5D7\\\\uB5D9-\\\\uB5F3\\\\uB5F5-\\\\uB60F\\\\uB611-\\\\uB62B\\\\uB62D-\\\\uB647\\\\uB649-\\\\uB663\\\\uB665-\\\\uB67F\\\\uB681-\\\\uB69B\\\\uB69D-\\\\uB6B7\\\\uB6B9-\\\\uB6D3\\\\uB6D5-\\\\uB6EF\\\\uB6F1-\\\\uB70B\\\\uB70D-\\\\uB727\\\\uB729-\\\\uB743\\\\uB745-\\\\uB75F\\\\uB761-\\\\uB77B\\\\uB77D-\\\\uB797\\\\uB799-\\\\uB7B3\\\\uB7B5-\\\\uB7CF\\\\uB7D1-\\\\uB7EB\\\\uB7ED-\\\\uB807\\\\uB809-\\\\uB823\\\\uB825-\\\\uB83F\\\\uB841-\\\\uB85B\\\\uB85D-\\\\uB877\\\\uB879-\\\\uB893\\\\uB895-\\\\uB8AF\\\\uB8B1-\\\\uB8CB\\\\uB8CD-\\\\uB8E7\\\\uB8E9-\\\\uB903\\\\uB905-\\\\uB91F\\\\uB921-\\\\uB93B\\\\uB93D-\\\\uB957\\\\uB959-\\\\uB973\\\\uB975-\\\\uB98F\\\\uB991-\\\\uB9AB\\\\uB9AD-\\\\uB9C7\\\\uB9C9-\\\\uB9E3\\\\uB9E5-\\\\uB9FF\\\\uBA01-\\\\uBA1B\\\\uBA1D-\\\\uBA37\\\\uBA39-\\\\uBA53\\\\uBA55-\\\\uBA6F\\\\uBA71-\\\\uBA8B\\\\uBA8D-\\\\uBAA7\\\\uBAA9-\\\\uBAC3\\\\uBAC5-\\\\uBADF\\\\uBAE1-\\\\uBAFB\\\\uBAFD-\\\\uBB17\\\\uBB19-\\\\uBB33\\\\uBB35-\\\\uBB4F\\\\uBB51-\\\\uBB6B\\\\uBB6D-\\\\uBB87\\\\uBB89-\\\\uBBA3\\\\uBBA5-\\\\uBBBF\\\\uBBC1-\\\\uBBDB\\\\uBBDD-\\\\uBBF7\\\\uBBF9-\\\\uBC13\\\\uBC15-\\\\uBC2F\\\\uBC31-\\\\uBC4B\\\\uBC4D-\\\\uBC67\\\\uBC69-\\\\uBC83\\\\uBC85-\\\\uBC9F\\\\uBCA1-\\\\uBCBB\\\\uBCBD-\\\\uBCD7\\\\uBCD9-\\\\uBCF3\\\\uBCF5-\\\\uBD0F\\\\uBD11-\\\\uBD2B\\\\uBD2D-\\\\uBD47\\\\uBD49-\\\\uBD63\\\\uBD65-\\\\uBD7F\\\\uBD81-\\\\uBD9B\\\\uBD9D-\\\\uBDB7\\\\uBDB9-\\\\uBDD3\\\\uBDD5-\\\\uBDEF\\\\uBDF1-\\\\uBE0B\\\\uBE0D-\\\\uBE27\\\\uBE29-\\\\uBE43\\\\uBE45-\\\\uBE5F\\\\uBE61-\\\\uBE7B\\\\uBE7D-\\\\uBE97\\\\uBE99-\\\\uBEB3\\\\uBEB5-\\\\uBECF\\\\uBED1-\\\\uBEEB\\\\uBEED-\\\\uBF07\\\\uBF09-\\\\uBF23\\\\uBF25-\\\\uBF3F\\\\uBF41-\\\\uBF5B\\\\uBF5D-\\\\uBF77\\\\uBF79-\\\\uBF93\\\\uBF95-\\\\uBFAF\\\\uBFB1-\\\\uBFCB\\\\uBFCD-\\\\uBFE7\\\\uBFE9-\\\\uC003\\\\uC005-\\\\uC01F\\\\uC021-\\\\uC03B\\\\uC03D-\\\\uC057\\\\uC059-\\\\uC073\\\\uC075-\\\\uC08F\\\\uC091-\\\\uC0AB\\\\uC0AD-\\\\uC0C7\\\\uC0C9-\\\\uC0E3\\\\uC0E5-\\\\uC0FF\\\\uC101-\\\\uC11B\\\\uC11D-\\\\uC137\\\\uC139-\\\\uC153\\\\uC155-\\\\uC16F\\\\uC171-\\\\uC18B\\\\uC18D-\\\\uC1A7\\\\uC1A9-\\\\uC1C3\\\\uC1C5-\\\\uC1DF\\\\uC1E1-\\\\uC1FB\\\\uC1FD-\\\\uC217\\\\uC219-\\\\uC233\\\\uC235-\\\\uC24F\\\\uC251-\\\\uC26B\\\\uC26D-\\\\uC287\\\\uC289-\\\\uC2A3\\\\uC2A5-\\\\uC2BF\\\\uC2C1-\\\\uC2DB\\\\uC2DD-\\\\uC2F7\\\\uC2F9-\\\\uC313\\\\uC315-\\\\uC32F\\\\uC331-\\\\uC34B\\\\uC34D-\\\\uC367\\\\uC369-\\\\uC383\\\\uC385-\\\\uC39F\\\\uC3A1-\\\\uC3BB\\\\uC3BD-\\\\uC3D7\\\\uC3D9-\\\\uC3F3\\\\uC3F5-\\\\uC40F\\\\uC411-\\\\uC42B\\\\uC42D-\\\\uC447\\\\uC449-\\\\uC463\\\\uC465-\\\\uC47F\\\\uC481-\\\\uC49B\\\\uC49D-\\\\uC4B7\\\\uC4B9-\\\\uC4D3\\\\uC4D5-\\\\uC4EF\\\\uC4F1-\\\\uC50B\\\\uC50D-\\\\uC527\\\\uC529-\\\\uC543\\\\uC545-\\\\uC55F\\\\uC561-\\\\uC57B\\\\uC57D-\\\\uC597\\\\uC599-\\\\uC5B3\\\\uC5B5-\\\\uC5CF\\\\uC5D1-\\\\uC5EB\\\\uC5ED-\\\\uC607\\\\uC609-\\\\uC623\\\\uC625-\\\\uC63F\\\\uC641-\\\\uC65B\\\\uC65D-\\\\uC677\\\\uC679-\\\\uC693\\\\uC695-\\\\uC6AF\\\\uC6B1-\\\\uC6CB\\\\uC6CD-\\\\uC6E7\\\\uC6E9-\\\\uC703\\\\uC705-\\\\uC71F\\\\uC721-\\\\uC73B\\\\uC73D-\\\\uC757\\\\uC759-\\\\uC773\\\\uC775-\\\\uC78F\\\\uC791-\\\\uC7AB\\\\uC7AD-\\\\uC7C7\\\\uC7C9-\\\\uC7E3\\\\uC7E5-\\\\uC7FF\\\\uC801-\\\\uC81B\\\\uC81D-\\\\uC837\\\\uC839-\\\\uC853\\\\uC855-\\\\uC86F\\\\uC871-\\\\uC88B\\\\uC88D-\\\\uC8A7\\\\uC8A9-\\\\uC8C3\\\\uC8C5-\\\\uC8DF\\\\uC8E1-\\\\uC8FB\\\\uC8FD-\\\\uC917\\\\uC919-\\\\uC933\\\\uC935-\\\\uC94F\\\\uC951-\\\\uC96B\\\\uC96D-\\\\uC987\\\\uC989-\\\\uC9A3\\\\uC9A5-\\\\uC9BF\\\\uC9C1-\\\\uC9DB\\\\uC9DD-\\\\uC9F7\\\\uC9F9-\\\\uCA13\\\\uCA15-\\\\uCA2F\\\\uCA31-\\\\uCA4B\\\\uCA4D-\\\\uCA67\\\\uCA69-\\\\uCA83\\\\uCA85-\\\\uCA9F\\\\uCAA1-\\\\uCABB\\\\uCABD-\\\\uCAD7\\\\uCAD9-\\\\uCAF3\\\\uCAF5-\\\\uCB0F\\\\uCB11-\\\\uCB2B\\\\uCB2D-\\\\uCB47\\\\uCB49-\\\\uCB63\\\\uCB65-\\\\uCB7F\\\\uCB81-\\\\uCB9B\\\\uCB9D-\\\\uCBB7\\\\uCBB9-\\\\uCBD3\\\\uCBD5-\\\\uCBEF\\\\uCBF1-\\\\uCC0B\\\\uCC0D-\\\\uCC27\\\\uCC29-\\\\uCC43\\\\uCC45-\\\\uCC5F\\\\uCC61-\\\\uCC7B\\\\uCC7D-\\\\uCC97\\\\uCC99-\\\\uCCB3\\\\uCCB5-\\\\uCCCF\\\\uCCD1-\\\\uCCEB\\\\uCCED-\\\\uCD07\\\\uCD09-\\\\uCD23\\\\uCD25-\\\\uCD3F\\\\uCD41-\\\\uCD5B\\\\uCD5D-\\\\uCD77\\\\uCD79-\\\\uCD93\\\\uCD95-\\\\uCDAF\\\\uCDB1-\\\\uCDCB\\\\uCDCD-\\\\uCDE7\\\\uCDE9-\\\\uCE03\\\\uCE05-\\\\uCE1F\\\\uCE21-\\\\uCE3B\\\\uCE3D-\\\\uCE57\\\\uCE59-\\\\uCE73\\\\uCE75-\\\\uCE8F\\\\uCE91-\\\\uCEAB\\\\uCEAD-\\\\uCEC7\\\\uCEC9-\\\\uCEE3\\\\uCEE5-\\\\uCEFF\\\\uCF01-\\\\uCF1B\\\\uCF1D-\\\\uCF37\\\\uCF39-\\\\uCF53\\\\uCF55-\\\\uCF6F\\\\uCF71-\\\\uCF8B\\\\uCF8D-\\\\uCFA7\\\\uCFA9-\\\\uCFC3\\\\uCFC5-\\\\uCFDF\\\\uCFE1-\\\\uCFFB\\\\uCFFD-\\\\uD017\\\\uD019-\\\\uD033\\\\uD035-\\\\uD04F\\\\uD051-\\\\uD06B\\\\uD06D-\\\\uD087\\\\uD089-\\\\uD0A3\\\\uD0A5-\\\\uD0BF\\\\uD0C1-\\\\uD0DB\\\\uD0DD-\\\\uD0F7\\\\uD0F9-\\\\uD113\\\\uD115-\\\\uD12F\\\\uD131-\\\\uD14B\\\\uD14D-\\\\uD167\\\\uD169-\\\\uD183\\\\uD185-\\\\uD19F\\\\uD1A1-\\\\uD1BB\\\\uD1BD-\\\\uD1D7\\\\uD1D9-\\\\uD1F3\\\\uD1F5-\\\\uD20F\\\\uD211-\\\\uD22B\\\\uD22D-\\\\uD247\\\\uD249-\\\\uD263\\\\uD265-\\\\uD27F\\\\uD281-\\\\uD29B\\\\uD29D-\\\\uD2B7\\\\uD2B9-\\\\uD2D3\\\\uD2D5-\\\\uD2EF\\\\uD2F1-\\\\uD30B\\\\uD30D-\\\\uD327\\\\uD329-\\\\uD343\\\\uD345-\\\\uD35F\\\\uD361-\\\\uD37B\\\\uD37D-\\\\uD397\\\\uD399-\\\\uD3B3\\\\uD3B5-\\\\uD3CF\\\\uD3D1-\\\\uD3EB\\\\uD3ED-\\\\uD407\\\\uD409-\\\\uD423\\\\uD425-\\\\uD43F\\\\uD441-\\\\uD45B\\\\uD45D-\\\\uD477\\\\uD479-\\\\uD493\\\\uD495-\\\\uD4AF\\\\uD4B1-\\\\uD4CB\\\\uD4CD-\\\\uD4E7\\\\uD4E9-\\\\uD503\\\\uD505-\\\\uD51F\\\\uD521-\\\\uD53B\\\\uD53D-\\\\uD557\\\\uD559-\\\\uD573\\\\uD575-\\\\uD58F\\\\uD591-\\\\uD5AB\\\\uD5AD-\\\\uD5C7\\\\uD5C9-\\\\uD5E3\\\\uD5E5-\\\\uD5FF\\\\uD601-\\\\uD61B\\\\uD61D-\\\\uD637\\\\uD639-\\\\uD653\\\\uD655-\\\\uD66F\\\\uD671-\\\\uD68B\\\\uD68D-\\\\uD6A7\\\\uD6A9-\\\\uD6C3\\\\uD6C5-\\\\uD6DF\\\\uD6E1-\\\\uD6FB\\\\uD6FD-\\\\uD717\\\\uD719-\\\\uD733\\\\uD735-\\\\uD74F\\\\uD751-\\\\uD76B\\\\uD76D-\\\\uD787\\\\uD789-\\\\uD7A3]\",\n \"$LinkingConsonant\": \"[\\\\u0915-\\\\u0939\\\\u0958-\\\\u095F\\\\u0978-\\\\u097F\\\\u0995-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09DC\\\\u09DD\\\\u09DF\\\\u09F0\\\\u09F1\\\\u0A95-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0AF9\\\\u0B15-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B5C\\\\u0B5D\\\\u0B5F\\\\u0B71\\\\u0C15-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C58-\\\\u0C5A\\\\u0D15-\\\\u0D3A]\",\n \"$Prepend\": \"(?:[\\\\u0600-\\\\u0605\\\\u06DD\\\\u070F\\\\u0890\\\\u0891\\\\u08E2\\\\u0D4E]|\\\\uD804[\\\\uDCBD\\\\uDCCD\\\\uDDC2\\\\uDDC3]|\\\\uD806[\\\\uDD3F\\\\uDD41\\\\uDE3A\\\\uDE84-\\\\uDE89]|\\\\uD807[\\\\uDD46\\\\uDF02])\",\n \"$RI\": \"(?:\\\\uD83C[\\\\uDDE6-\\\\uDDFF])\",\n \"$SpacingMark\": \"(?:[\\\\u0903\\\\u093B\\\\u093E-\\\\u0940\\\\u0949-\\\\u094C\\\\u094E\\\\u094F\\\\u0982\\\\u0983\\\\u09BF\\\\u09C0\\\\u09C7\\\\u09C8\\\\u09CB\\\\u09CC\\\\u0A03\\\\u0A3E-\\\\u0A40\\\\u0A83\\\\u0ABE-\\\\u0AC0\\\\u0AC9\\\\u0ACB\\\\u0ACC\\\\u0B02\\\\u0B03\\\\u0B40\\\\u0B47\\\\u0B48\\\\u0B4B\\\\u0B4C\\\\u0BBF\\\\u0BC1\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCC\\\\u0C01-\\\\u0C03\\\\u0C41-\\\\u0C44\\\\u0C82\\\\u0C83\\\\u0CBE\\\\u0CC0\\\\u0CC1\\\\u0CC3\\\\u0CC4\\\\u0CC7\\\\u0CC8\\\\u0CCA\\\\u0CCB\\\\u0CF3\\\\u0D02\\\\u0D03\\\\u0D3F\\\\u0D40\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4C\\\\u0D82\\\\u0D83\\\\u0DD0\\\\u0DD1\\\\u0DD8-\\\\u0DDE\\\\u0DF2\\\\u0DF3\\\\u0E33\\\\u0EB3\\\\u0F3E\\\\u0F3F\\\\u0F7F\\\\u1031\\\\u103B\\\\u103C\\\\u1056\\\\u1057\\\\u1084\\\\u1715\\\\u1734\\\\u17B6\\\\u17BE-\\\\u17C5\\\\u17C7\\\\u17C8\\\\u1923-\\\\u1926\\\\u1929-\\\\u192B\\\\u1930\\\\u1931\\\\u1933-\\\\u1938\\\\u1A19\\\\u1A1A\\\\u1A55\\\\u1A57\\\\u1A6D-\\\\u1A72\\\\u1B04\\\\u1B3B\\\\u1B3D-\\\\u1B41\\\\u1B43\\\\u1B44\\\\u1B82\\\\u1BA1\\\\u1BA6\\\\u1BA7\\\\u1BAA\\\\u1BE7\\\\u1BEA-\\\\u1BEC\\\\u1BEE\\\\u1BF2\\\\u1BF3\\\\u1C24-\\\\u1C2B\\\\u1C34\\\\u1C35\\\\u1CE1\\\\u1CF7\\\\uA823\\\\uA824\\\\uA827\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C3\\\\uA952\\\\uA953\\\\uA983\\\\uA9B4\\\\uA9B5\\\\uA9BA\\\\uA9BB\\\\uA9BE-\\\\uA9C0\\\\uAA2F\\\\uAA30\\\\uAA33\\\\uAA34\\\\uAA4D\\\\uAAEB\\\\uAAEE\\\\uAAEF\\\\uAAF5\\\\uABE3\\\\uABE4\\\\uABE6\\\\uABE7\\\\uABE9\\\\uABEA\\\\uABEC]|\\\\uD804[\\\\uDC00\\\\uDC02\\\\uDC82\\\\uDCB0-\\\\uDCB2\\\\uDCB7\\\\uDCB8\\\\uDD2C\\\\uDD45\\\\uDD46\\\\uDD82\\\\uDDB3-\\\\uDDB5\\\\uDDBF\\\\uDDC0\\\\uDDCE\\\\uDE2C-\\\\uDE2E\\\\uDE32\\\\uDE33\\\\uDE35\\\\uDEE0-\\\\uDEE2\\\\uDF02\\\\uDF03\\\\uDF3F\\\\uDF41-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF62\\\\uDF63]|\\\\uD805[\\\\uDC35-\\\\uDC37\\\\uDC40\\\\uDC41\\\\uDC45\\\\uDCB1\\\\uDCB2\\\\uDCB9\\\\uDCBB\\\\uDCBC\\\\uDCBE\\\\uDCC1\\\\uDDB0\\\\uDDB1\\\\uDDB8-\\\\uDDBB\\\\uDDBE\\\\uDE30-\\\\uDE32\\\\uDE3B\\\\uDE3C\\\\uDE3E\\\\uDEAC\\\\uDEAE\\\\uDEAF\\\\uDEB6\\\\uDF26]|\\\\uD806[\\\\uDC2C-\\\\uDC2E\\\\uDC38\\\\uDD31-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3D\\\\uDD40\\\\uDD42\\\\uDDD1-\\\\uDDD3\\\\uDDDC-\\\\uDDDF\\\\uDDE4\\\\uDE39\\\\uDE57\\\\uDE58\\\\uDE97]|\\\\uD807[\\\\uDC2F\\\\uDC3E\\\\uDCA9\\\\uDCB1\\\\uDCB4\\\\uDD8A-\\\\uDD8E\\\\uDD93\\\\uDD94\\\\uDD96\\\\uDEF5\\\\uDEF6\\\\uDF03\\\\uDF34\\\\uDF35\\\\uDF3E\\\\uDF3F\\\\uDF41]|\\\\uD81B[\\\\uDF51-\\\\uDF87\\\\uDFF0\\\\uDFF1]|\\\\uD834[\\\\uDD66\\\\uDD6D])\",\n \"$T\": \"[\\\\u11A8-\\\\u11FF\\\\uD7CB-\\\\uD7FB]\",\n \"$V\": \"[\\\\u1160-\\\\u11A7\\\\uD7B0-\\\\uD7C6]\",\n \"$Virama\": \"[\\\\u094D\\\\u09CD\\\\u0ACD\\\\u0B4D\\\\u0C4D\\\\u0D4D]\",\n \"$ZWJ\": \"\\\\u200D\"\n }\n },\n \"sentence\": {\n \"segmentRules\": {\n \"10\": {\n \"after\": \"($Sp|$ParaSep)\",\n \"before\": \"$SATerm$Close*$Sp*\",\n \"breaks\": false\n },\n \"11\": {\n \"before\": \"$SATerm$Close*$Sp*$ParaSep?\",\n \"breaks\": true\n },\n \"3\": {\n \"after\": \"$LF\",\n \"before\": \"$CR\",\n \"breaks\": false\n },\n \"4\": {\n \"before\": \"$ParaSep\",\n \"breaks\": true\n },\n \"5\": {\n \"after\": \"(?:$Format|$Extend)\",\n \"breaks\": false\n },\n \"6\": {\n \"after\": \"$Numeric\",\n \"before\": \"$ATerm\",\n \"breaks\": false\n },\n \"7\": {\n \"after\": \"$Upper\",\n \"before\": \"($Upper|$Lower)$ATerm\",\n \"breaks\": false\n },\n \"8\": {\n \"after\": \"$NotPreLower_*$Lower\",\n \"before\": \"$ATerm$Close*$Sp*\",\n \"breaks\": false\n },\n \"8.1\": {\n \"after\": \"($SContinue|$SATerm)\",\n \"before\": \"$SATerm$Close*$Sp*\",\n \"breaks\": false\n },\n \"9\": {\n \"after\": \"($Close|$Sp|$ParaSep)\",\n \"before\": \"$SATerm$Close*\",\n \"breaks\": false\n },\n \"998\": {\n \"after\": \"$Any\",\n \"breaks\": false\n }\n },\n \"suppressions\": [],\n \"variables\": {\n \"$ATerm\": \"([\\\\.\\\\u2024\\\\uFE52\\\\uFF0E](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Any\": \"(?:[\\\\0-\\\\uD7FF\\\\uE000-\\\\uFFFF]|[\\\\uD800-\\\\uDBFF][\\\\uDC00-\\\\uDFFF]|[\\\\uD800-\\\\uDBFF](?![\\\\uDC00-\\\\uDFFF])|(?:[^\\\\uD800-\\\\uDBFF]|^)[\\\\uDC00-\\\\uDFFF])\",\n \"$CR\": \"\\\\r\",\n \"$Close\": \"((?:[\\\"'-\\\\)\\\\[\\\\]\\\\{\\\\}\\\\xAB\\\\xBB\\\\u0F3A-\\\\u0F3D\\\\u169B\\\\u169C\\\\u2018-\\\\u201F\\\\u2039\\\\u203A\\\\u2045\\\\u2046\\\\u207D\\\\u207E\\\\u208D\\\\u208E\\\\u2308-\\\\u230B\\\\u2329\\\\u232A\\\\u275B-\\\\u2760\\\\u2768-\\\\u2775\\\\u27C5\\\\u27C6\\\\u27E6-\\\\u27EF\\\\u2983-\\\\u2998\\\\u29D8-\\\\u29DB\\\\u29FC\\\\u29FD\\\\u2E00-\\\\u2E0D\\\\u2E1C\\\\u2E1D\\\\u2E20-\\\\u2E29\\\\u2E42\\\\u2E55-\\\\u2E5C\\\\u3008-\\\\u3011\\\\u3014-\\\\u301B\\\\u301D-\\\\u301F\\\\uFD3E\\\\uFD3F\\\\uFE17\\\\uFE18\\\\uFE35-\\\\uFE44\\\\uFE47\\\\uFE48\\\\uFE59-\\\\uFE5E\\\\uFF08\\\\uFF09\\\\uFF3B\\\\uFF3D\\\\uFF5B\\\\uFF5D\\\\uFF5F\\\\uFF60\\\\uFF62\\\\uFF63]|\\\\uD83D[\\\\uDE76-\\\\uDE78])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Extend\": \"(?:[\\\\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\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0898-\\\\u089F\\\\u08CA-\\\\u08E1\\\\u08E3-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C\\\\u200D\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFF9E\\\\uFF9F]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCC2\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD72\\\\uDD7B-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$FE\": \"(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$Format\": \"(?:[\\\\xAD\\\\u0600-\\\\u0605\\\\u061C\\\\u06DD\\\\u070F\\\\u0890\\\\u0891\\\\u08E2\\\\u180E\\\\u200B\\\\u200E\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\uFEFF\\\\uFFF9-\\\\uFFFB]|\\\\uD804[\\\\uDCBD\\\\uDCCD]|\\\\uD80D[\\\\uDC30-\\\\uDC3F]|\\\\uD82F[\\\\uDCA0-\\\\uDCA3]|\\\\uD834[\\\\uDD73-\\\\uDD7A]|\\\\uDB40\\\\uDC01)\",\n \"$LF\": \"\\\\n\",\n \"$Lower\": \"((?:[a-z\\\\xAA\\\\xB5\\\\xBA\\\\xDF-\\\\xF6\\\\xF8-\\\\xFF\\\\u0101\\\\u0103\\\\u0105\\\\u0107\\\\u0109\\\\u010B\\\\u010D\\\\u010F\\\\u0111\\\\u0113\\\\u0115\\\\u0117\\\\u0119\\\\u011B\\\\u011D\\\\u011F\\\\u0121\\\\u0123\\\\u0125\\\\u0127\\\\u0129\\\\u012B\\\\u012D\\\\u012F\\\\u0131\\\\u0133\\\\u0135\\\\u0137\\\\u0138\\\\u013A\\\\u013C\\\\u013E\\\\u0140\\\\u0142\\\\u0144\\\\u0146\\\\u0148\\\\u0149\\\\u014B\\\\u014D\\\\u014F\\\\u0151\\\\u0153\\\\u0155\\\\u0157\\\\u0159\\\\u015B\\\\u015D\\\\u015F\\\\u0161\\\\u0163\\\\u0165\\\\u0167\\\\u0169\\\\u016B\\\\u016D\\\\u016F\\\\u0171\\\\u0173\\\\u0175\\\\u0177\\\\u017A\\\\u017C\\\\u017E-\\\\u0180\\\\u0183\\\\u0185\\\\u0188\\\\u018C\\\\u018D\\\\u0192\\\\u0195\\\\u0199-\\\\u019B\\\\u019E\\\\u01A1\\\\u01A3\\\\u01A5\\\\u01A8\\\\u01AA\\\\u01AB\\\\u01AD\\\\u01B0\\\\u01B4\\\\u01B6\\\\u01B9\\\\u01BA\\\\u01BD-\\\\u01BF\\\\u01C6\\\\u01C9\\\\u01CC\\\\u01CE\\\\u01D0\\\\u01D2\\\\u01D4\\\\u01D6\\\\u01D8\\\\u01DA\\\\u01DC\\\\u01DD\\\\u01DF\\\\u01E1\\\\u01E3\\\\u01E5\\\\u01E7\\\\u01E9\\\\u01EB\\\\u01ED\\\\u01EF\\\\u01F0\\\\u01F3\\\\u01F5\\\\u01F9\\\\u01FB\\\\u01FD\\\\u01FF\\\\u0201\\\\u0203\\\\u0205\\\\u0207\\\\u0209\\\\u020B\\\\u020D\\\\u020F\\\\u0211\\\\u0213\\\\u0215\\\\u0217\\\\u0219\\\\u021B\\\\u021D\\\\u021F\\\\u0221\\\\u0223\\\\u0225\\\\u0227\\\\u0229\\\\u022B\\\\u022D\\\\u022F\\\\u0231\\\\u0233-\\\\u0239\\\\u023C\\\\u023F\\\\u0240\\\\u0242\\\\u0247\\\\u0249\\\\u024B\\\\u024D\\\\u024F-\\\\u0293\\\\u0295-\\\\u02B8\\\\u02C0\\\\u02C1\\\\u02E0-\\\\u02E4\\\\u0371\\\\u0373\\\\u0377\\\\u037A-\\\\u037D\\\\u0390\\\\u03AC-\\\\u03CE\\\\u03D0\\\\u03D1\\\\u03D5-\\\\u03D7\\\\u03D9\\\\u03DB\\\\u03DD\\\\u03DF\\\\u03E1\\\\u03E3\\\\u03E5\\\\u03E7\\\\u03E9\\\\u03EB\\\\u03ED\\\\u03EF-\\\\u03F3\\\\u03F5\\\\u03F8\\\\u03FB\\\\u03FC\\\\u0430-\\\\u045F\\\\u0461\\\\u0463\\\\u0465\\\\u0467\\\\u0469\\\\u046B\\\\u046D\\\\u046F\\\\u0471\\\\u0473\\\\u0475\\\\u0477\\\\u0479\\\\u047B\\\\u047D\\\\u047F\\\\u0481\\\\u048B\\\\u048D\\\\u048F\\\\u0491\\\\u0493\\\\u0495\\\\u0497\\\\u0499\\\\u049B\\\\u049D\\\\u049F\\\\u04A1\\\\u04A3\\\\u04A5\\\\u04A7\\\\u04A9\\\\u04AB\\\\u04AD\\\\u04AF\\\\u04B1\\\\u04B3\\\\u04B5\\\\u04B7\\\\u04B9\\\\u04BB\\\\u04BD\\\\u04BF\\\\u04C2\\\\u04C4\\\\u04C6\\\\u04C8\\\\u04CA\\\\u04CC\\\\u04CE\\\\u04CF\\\\u04D1\\\\u04D3\\\\u04D5\\\\u04D7\\\\u04D9\\\\u04DB\\\\u04DD\\\\u04DF\\\\u04E1\\\\u04E3\\\\u04E5\\\\u04E7\\\\u04E9\\\\u04EB\\\\u04ED\\\\u04EF\\\\u04F1\\\\u04F3\\\\u04F5\\\\u04F7\\\\u04F9\\\\u04FB\\\\u04FD\\\\u04FF\\\\u0501\\\\u0503\\\\u0505\\\\u0507\\\\u0509\\\\u050B\\\\u050D\\\\u050F\\\\u0511\\\\u0513\\\\u0515\\\\u0517\\\\u0519\\\\u051B\\\\u051D\\\\u051F\\\\u0521\\\\u0523\\\\u0525\\\\u0527\\\\u0529\\\\u052B\\\\u052D\\\\u052F\\\\u0560-\\\\u0588\\\\u10FC\\\\u13F8-\\\\u13FD\\\\u1C80-\\\\u1C88\\\\u1D00-\\\\u1DBF\\\\u1E01\\\\u1E03\\\\u1E05\\\\u1E07\\\\u1E09\\\\u1E0B\\\\u1E0D\\\\u1E0F\\\\u1E11\\\\u1E13\\\\u1E15\\\\u1E17\\\\u1E19\\\\u1E1B\\\\u1E1D\\\\u1E1F\\\\u1E21\\\\u1E23\\\\u1E25\\\\u1E27\\\\u1E29\\\\u1E2B\\\\u1E2D\\\\u1E2F\\\\u1E31\\\\u1E33\\\\u1E35\\\\u1E37\\\\u1E39\\\\u1E3B\\\\u1E3D\\\\u1E3F\\\\u1E41\\\\u1E43\\\\u1E45\\\\u1E47\\\\u1E49\\\\u1E4B\\\\u1E4D\\\\u1E4F\\\\u1E51\\\\u1E53\\\\u1E55\\\\u1E57\\\\u1E59\\\\u1E5B\\\\u1E5D\\\\u1E5F\\\\u1E61\\\\u1E63\\\\u1E65\\\\u1E67\\\\u1E69\\\\u1E6B\\\\u1E6D\\\\u1E6F\\\\u1E71\\\\u1E73\\\\u1E75\\\\u1E77\\\\u1E79\\\\u1E7B\\\\u1E7D\\\\u1E7F\\\\u1E81\\\\u1E83\\\\u1E85\\\\u1E87\\\\u1E89\\\\u1E8B\\\\u1E8D\\\\u1E8F\\\\u1E91\\\\u1E93\\\\u1E95-\\\\u1E9D\\\\u1E9F\\\\u1EA1\\\\u1EA3\\\\u1EA5\\\\u1EA7\\\\u1EA9\\\\u1EAB\\\\u1EAD\\\\u1EAF\\\\u1EB1\\\\u1EB3\\\\u1EB5\\\\u1EB7\\\\u1EB9\\\\u1EBB\\\\u1EBD\\\\u1EBF\\\\u1EC1\\\\u1EC3\\\\u1EC5\\\\u1EC7\\\\u1EC9\\\\u1ECB\\\\u1ECD\\\\u1ECF\\\\u1ED1\\\\u1ED3\\\\u1ED5\\\\u1ED7\\\\u1ED9\\\\u1EDB\\\\u1EDD\\\\u1EDF\\\\u1EE1\\\\u1EE3\\\\u1EE5\\\\u1EE7\\\\u1EE9\\\\u1EEB\\\\u1EED\\\\u1EEF\\\\u1EF1\\\\u1EF3\\\\u1EF5\\\\u1EF7\\\\u1EF9\\\\u1EFB\\\\u1EFD\\\\u1EFF-\\\\u1F07\\\\u1F10-\\\\u1F15\\\\u1F20-\\\\u1F27\\\\u1F30-\\\\u1F37\\\\u1F40-\\\\u1F45\\\\u1F50-\\\\u1F57\\\\u1F60-\\\\u1F67\\\\u1F70-\\\\u1F7D\\\\u1F80-\\\\u1F87\\\\u1F90-\\\\u1F97\\\\u1FA0-\\\\u1FA7\\\\u1FB0-\\\\u1FB4\\\\u1FB6\\\\u1FB7\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6\\\\u1FC7\\\\u1FD0-\\\\u1FD3\\\\u1FD6\\\\u1FD7\\\\u1FE0-\\\\u1FE7\\\\u1FF2-\\\\u1FF4\\\\u1FF6\\\\u1FF7\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u210A\\\\u210E\\\\u210F\\\\u2113\\\\u212F\\\\u2134\\\\u2139\\\\u213C\\\\u213D\\\\u2146-\\\\u2149\\\\u214E\\\\u2170-\\\\u217F\\\\u2184\\\\u24D0-\\\\u24E9\\\\u2C30-\\\\u2C5F\\\\u2C61\\\\u2C65\\\\u2C66\\\\u2C68\\\\u2C6A\\\\u2C6C\\\\u2C71\\\\u2C73\\\\u2C74\\\\u2C76-\\\\u2C7D\\\\u2C81\\\\u2C83\\\\u2C85\\\\u2C87\\\\u2C89\\\\u2C8B\\\\u2C8D\\\\u2C8F\\\\u2C91\\\\u2C93\\\\u2C95\\\\u2C97\\\\u2C99\\\\u2C9B\\\\u2C9D\\\\u2C9F\\\\u2CA1\\\\u2CA3\\\\u2CA5\\\\u2CA7\\\\u2CA9\\\\u2CAB\\\\u2CAD\\\\u2CAF\\\\u2CB1\\\\u2CB3\\\\u2CB5\\\\u2CB7\\\\u2CB9\\\\u2CBB\\\\u2CBD\\\\u2CBF\\\\u2CC1\\\\u2CC3\\\\u2CC5\\\\u2CC7\\\\u2CC9\\\\u2CCB\\\\u2CCD\\\\u2CCF\\\\u2CD1\\\\u2CD3\\\\u2CD5\\\\u2CD7\\\\u2CD9\\\\u2CDB\\\\u2CDD\\\\u2CDF\\\\u2CE1\\\\u2CE3\\\\u2CE4\\\\u2CEC\\\\u2CEE\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\uA641\\\\uA643\\\\uA645\\\\uA647\\\\uA649\\\\uA64B\\\\uA64D\\\\uA64F\\\\uA651\\\\uA653\\\\uA655\\\\uA657\\\\uA659\\\\uA65B\\\\uA65D\\\\uA65F\\\\uA661\\\\uA663\\\\uA665\\\\uA667\\\\uA669\\\\uA66B\\\\uA66D\\\\uA681\\\\uA683\\\\uA685\\\\uA687\\\\uA689\\\\uA68B\\\\uA68D\\\\uA68F\\\\uA691\\\\uA693\\\\uA695\\\\uA697\\\\uA699\\\\uA69B-\\\\uA69D\\\\uA723\\\\uA725\\\\uA727\\\\uA729\\\\uA72B\\\\uA72D\\\\uA72F-\\\\uA731\\\\uA733\\\\uA735\\\\uA737\\\\uA739\\\\uA73B\\\\uA73D\\\\uA73F\\\\uA741\\\\uA743\\\\uA745\\\\uA747\\\\uA749\\\\uA74B\\\\uA74D\\\\uA74F\\\\uA751\\\\uA753\\\\uA755\\\\uA757\\\\uA759\\\\uA75B\\\\uA75D\\\\uA75F\\\\uA761\\\\uA763\\\\uA765\\\\uA767\\\\uA769\\\\uA76B\\\\uA76D\\\\uA76F-\\\\uA778\\\\uA77A\\\\uA77C\\\\uA77F\\\\uA781\\\\uA783\\\\uA785\\\\uA787\\\\uA78C\\\\uA78E\\\\uA791\\\\uA793-\\\\uA795\\\\uA797\\\\uA799\\\\uA79B\\\\uA79D\\\\uA79F\\\\uA7A1\\\\uA7A3\\\\uA7A5\\\\uA7A7\\\\uA7A9\\\\uA7AF\\\\uA7B5\\\\uA7B7\\\\uA7B9\\\\uA7BB\\\\uA7BD\\\\uA7BF\\\\uA7C1\\\\uA7C3\\\\uA7C8\\\\uA7CA\\\\uA7D1\\\\uA7D3\\\\uA7D5\\\\uA7D7\\\\uA7D9\\\\uA7F2-\\\\uA7F4\\\\uA7F6\\\\uA7F8-\\\\uA7FA\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB69\\\\uAB70-\\\\uABBF\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFF41-\\\\uFF5A]|\\\\uD801[\\\\uDC28-\\\\uDC4F\\\\uDCD8-\\\\uDCFB\\\\uDD97-\\\\uDDA1\\\\uDDA3-\\\\uDDB1\\\\uDDB3-\\\\uDDB9\\\\uDDBB\\\\uDDBC\\\\uDF80\\\\uDF83-\\\\uDF85\\\\uDF87-\\\\uDFB0\\\\uDFB2-\\\\uDFBA]|\\\\uD803[\\\\uDCC0-\\\\uDCF2]|\\\\uD806[\\\\uDCC0-\\\\uDCDF]|\\\\uD81B[\\\\uDE60-\\\\uDE7F]|\\\\uD835[\\\\uDC1A-\\\\uDC33\\\\uDC4E-\\\\uDC54\\\\uDC56-\\\\uDC67\\\\uDC82-\\\\uDC9B\\\\uDCB6-\\\\uDCB9\\\\uDCBB\\\\uDCBD-\\\\uDCC3\\\\uDCC5-\\\\uDCCF\\\\uDCEA-\\\\uDD03\\\\uDD1E-\\\\uDD37\\\\uDD52-\\\\uDD6B\\\\uDD86-\\\\uDD9F\\\\uDDBA-\\\\uDDD3\\\\uDDEE-\\\\uDE07\\\\uDE22-\\\\uDE3B\\\\uDE56-\\\\uDE6F\\\\uDE8A-\\\\uDEA5\\\\uDEC2-\\\\uDEDA\\\\uDEDC-\\\\uDEE1\\\\uDEFC-\\\\uDF14\\\\uDF16-\\\\uDF1B\\\\uDF36-\\\\uDF4E\\\\uDF50-\\\\uDF55\\\\uDF70-\\\\uDF88\\\\uDF8A-\\\\uDF8F\\\\uDFAA-\\\\uDFC2\\\\uDFC4-\\\\uDFC9\\\\uDFCB]|\\\\uD837[\\\\uDF00-\\\\uDF09\\\\uDF0B-\\\\uDF1E\\\\uDF25-\\\\uDF2A]|\\\\uD838[\\\\uDC30-\\\\uDC6D]|\\\\uD83A[\\\\uDD22-\\\\uDD43])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$NotPreLower_\": \"(?:(?![\\\\n\\\\r!\\\\.\\\\?A-Za-z\\\\x85\\\\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-\\\\u0589\\\\u05D0-\\\\u05EA\\\\u05EF-\\\\u05F3\\\\u061D-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF-\\\\u0702\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07F9\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0837\\\\u0839\\\\u083D\\\\u083E\\\\u0840-\\\\u0858\\\\u0860-\\\\u086A\\\\u0870-\\\\u0887\\\\u0889-\\\\u088E\\\\u08A0-\\\\u08C9\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0964\\\\u0965\\\\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\\\\u104A\\\\u104B\\\\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\\\\u1362\\\\u1367\\\\u1368\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166E-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u1711\\\\u171F-\\\\u1731\\\\u1735\\\\u1736\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1803\\\\u1809\\\\u1820-\\\\u1878\\\\u1880-\\\\u1884\\\\u1887-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1944\\\\u1945\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7-\\\\u1AAB\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4C\\\\u1B5A\\\\u1B5B\\\\u1B5E\\\\u1B5F\\\\u1B7D\\\\u1B7E\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C3B\\\\u1C3C\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\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\\\\u2024\\\\u2028\\\\u2029\\\\u203C\\\\u203D\\\\u2047-\\\\u2049\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u24B6-\\\\u24E9\\\\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\\\\u2E2E\\\\u2E2F\\\\u2E3C\\\\u2E53\\\\u2E54\\\\u3002\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312F\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BF\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DBF\\\\u4E00-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA4FF-\\\\uA60C\\\\uA60E-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA6F3\\\\uA6F7\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA7CA\\\\uA7D0\\\\uA7D1\\\\uA7D3\\\\uA7D5-\\\\uA7D9\\\\uA7F2-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA876\\\\uA877\\\\uA882-\\\\uA8B3\\\\uA8CE\\\\uA8CF\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA8FD\\\\uA8FE\\\\uA90A-\\\\uA925\\\\uA92F-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9C8\\\\uA9C9\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA5D-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF0-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB69\\\\uAB70-\\\\uABE2\\\\uABEB\\\\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\\\\uFE52\\\\uFE56\\\\uFE57\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF01\\\\uFF0E\\\\uFF1F\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF61\\\\uFF66-\\\\uFF9D\\\\uFFA0-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]|\\\\uD800[\\\\uDC00-\\\\uDC0B\\\\uDC0D-\\\\uDC26\\\\uDC28-\\\\uDC3A\\\\uDC3C\\\\uDC3D\\\\uDC3F-\\\\uDC4D\\\\uDC50-\\\\uDC5D\\\\uDC80-\\\\uDCFA\\\\uDD40-\\\\uDD74\\\\uDE80-\\\\uDE9C\\\\uDEA0-\\\\uDED0\\\\uDF00-\\\\uDF1F\\\\uDF2D-\\\\uDF4A\\\\uDF50-\\\\uDF75\\\\uDF80-\\\\uDF9D\\\\uDFA0-\\\\uDFC3\\\\uDFC8-\\\\uDFCF\\\\uDFD1-\\\\uDFD5]|\\\\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\\\\uDE56\\\\uDE57\\\\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\\\\uDF55-\\\\uDF59\\\\uDF70-\\\\uDF81\\\\uDF86-\\\\uDF89\\\\uDFB0-\\\\uDFC4\\\\uDFE0-\\\\uDFF6]|\\\\uD804[\\\\uDC03-\\\\uDC37\\\\uDC47\\\\uDC48\\\\uDC71\\\\uDC72\\\\uDC75\\\\uDC83-\\\\uDCAF\\\\uDCBE-\\\\uDCC1\\\\uDCD0-\\\\uDCE8\\\\uDD03-\\\\uDD26\\\\uDD41-\\\\uDD44\\\\uDD47\\\\uDD50-\\\\uDD72\\\\uDD76\\\\uDD83-\\\\uDDB2\\\\uDDC1-\\\\uDDC6\\\\uDDCD\\\\uDDDA\\\\uDDDC\\\\uDDDE\\\\uDDDF\\\\uDE00-\\\\uDE11\\\\uDE13-\\\\uDE2B\\\\uDE38\\\\uDE39\\\\uDE3B\\\\uDE3C\\\\uDE3F\\\\uDE40\\\\uDE80-\\\\uDE86\\\\uDE88\\\\uDE8A-\\\\uDE8D\\\\uDE8F-\\\\uDE9D\\\\uDE9F-\\\\uDEA9\\\\uDEB0-\\\\uDEDE\\\\uDF05-\\\\uDF0C\\\\uDF0F\\\\uDF10\\\\uDF13-\\\\uDF28\\\\uDF2A-\\\\uDF30\\\\uDF32\\\\uDF33\\\\uDF35-\\\\uDF39\\\\uDF3D\\\\uDF50\\\\uDF5D-\\\\uDF61]|\\\\uD805[\\\\uDC00-\\\\uDC34\\\\uDC47-\\\\uDC4C\\\\uDC5F-\\\\uDC61\\\\uDC80-\\\\uDCAF\\\\uDCC4\\\\uDCC5\\\\uDCC7\\\\uDD80-\\\\uDDAE\\\\uDDC2\\\\uDDC3\\\\uDDC9-\\\\uDDDB\\\\uDE00-\\\\uDE2F\\\\uDE41\\\\uDE42\\\\uDE44\\\\uDE80-\\\\uDEAA\\\\uDEB8\\\\uDF00-\\\\uDF1A\\\\uDF3C-\\\\uDF3E\\\\uDF40-\\\\uDF46]|\\\\uD806[\\\\uDC00-\\\\uDC2B\\\\uDCA0-\\\\uDCDF\\\\uDCFF-\\\\uDD06\\\\uDD09\\\\uDD0C-\\\\uDD13\\\\uDD15\\\\uDD16\\\\uDD18-\\\\uDD2F\\\\uDD3F\\\\uDD41\\\\uDD44\\\\uDD46\\\\uDDA0-\\\\uDDA7\\\\uDDAA-\\\\uDDD0\\\\uDDE1\\\\uDDE3\\\\uDE00\\\\uDE0B-\\\\uDE32\\\\uDE3A\\\\uDE42\\\\uDE43\\\\uDE50\\\\uDE5C-\\\\uDE89\\\\uDE9B-\\\\uDE9D\\\\uDEB0-\\\\uDEF8]|\\\\uD807[\\\\uDC00-\\\\uDC08\\\\uDC0A-\\\\uDC2E\\\\uDC40-\\\\uDC42\\\\uDC72-\\\\uDC8F\\\\uDD00-\\\\uDD06\\\\uDD08\\\\uDD09\\\\uDD0B-\\\\uDD30\\\\uDD46\\\\uDD60-\\\\uDD65\\\\uDD67\\\\uDD68\\\\uDD6A-\\\\uDD89\\\\uDD98\\\\uDEE0-\\\\uDEF2\\\\uDEF7\\\\uDEF8\\\\uDF02\\\\uDF04-\\\\uDF10\\\\uDF12-\\\\uDF33\\\\uDF43\\\\uDF44\\\\uDFB0]|\\\\uD808[\\\\uDC00-\\\\uDF99]|\\\\uD809[\\\\uDC00-\\\\uDC6E\\\\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\\\\uDE6E-\\\\uDEBE\\\\uDED0-\\\\uDEED\\\\uDEF5\\\\uDF00-\\\\uDF2F\\\\uDF37\\\\uDF38\\\\uDF40-\\\\uDF44\\\\uDF63-\\\\uDF77\\\\uDF7D-\\\\uDF8F]|\\\\uD81B[\\\\uDE40-\\\\uDE7F\\\\uDE98\\\\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\\\\uDC9F]|\\\\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]|\\\\uD836\\\\uDE88|\\\\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]|\\\\uD83C[\\\\uDD30-\\\\uDD49\\\\uDD50-\\\\uDD69\\\\uDD70-\\\\uDD89]|\\\\uD869[\\\\uDC00-\\\\uDEDF\\\\uDF00-\\\\uDFFF]|\\\\uD86D[\\\\uDC00-\\\\uDF39\\\\uDF40-\\\\uDFFF]|\\\\uD86E[\\\\uDC00-\\\\uDC1D\\\\uDC20-\\\\uDFFF]|\\\\uD873[\\\\uDC00-\\\\uDEA1\\\\uDEB0-\\\\uDFFF]|\\\\uD87A[\\\\uDC00-\\\\uDFE0]|\\\\uD87E[\\\\uDC00-\\\\uDE1D]|\\\\uD884[\\\\uDC00-\\\\uDF4A\\\\uDF50-\\\\uDFFF]|\\\\uD888[\\\\uDC00-\\\\uDFAF])[\\\\s\\\\S])\",\n \"$Numeric\": \"((?:[0-9\\\\u0660-\\\\u0669\\\\u066B\\\\u066C\\\\u06F0-\\\\u06F9\\\\u07C0-\\\\u07C9\\\\u0966-\\\\u096F\\\\u09E6-\\\\u09EF\\\\u0A66-\\\\u0A6F\\\\u0AE6-\\\\u0AEF\\\\u0B66-\\\\u0B6F\\\\u0BE6-\\\\u0BEF\\\\u0C66-\\\\u0C6F\\\\u0CE6-\\\\u0CEF\\\\u0D66-\\\\u0D6F\\\\u0DE6-\\\\u0DEF\\\\u0E50-\\\\u0E59\\\\u0ED0-\\\\u0ED9\\\\u0F20-\\\\u0F29\\\\u1040-\\\\u1049\\\\u1090-\\\\u1099\\\\u17E0-\\\\u17E9\\\\u1810-\\\\u1819\\\\u1946-\\\\u194F\\\\u19D0-\\\\u19D9\\\\u1A80-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1B50-\\\\u1B59\\\\u1BB0-\\\\u1BB9\\\\u1C40-\\\\u1C49\\\\u1C50-\\\\u1C59\\\\uA620-\\\\uA629\\\\uA8D0-\\\\uA8D9\\\\uA900-\\\\uA909\\\\uA9D0-\\\\uA9D9\\\\uA9F0-\\\\uA9F9\\\\uAA50-\\\\uAA59\\\\uABF0-\\\\uABF9\\\\uFF10-\\\\uFF19]|\\\\uD801[\\\\uDCA0-\\\\uDCA9]|\\\\uD803[\\\\uDD30-\\\\uDD39]|\\\\uD804[\\\\uDC66-\\\\uDC6F\\\\uDCF0-\\\\uDCF9\\\\uDD36-\\\\uDD3F\\\\uDDD0-\\\\uDDD9\\\\uDEF0-\\\\uDEF9]|\\\\uD805[\\\\uDC50-\\\\uDC59\\\\uDCD0-\\\\uDCD9\\\\uDE50-\\\\uDE59\\\\uDEC0-\\\\uDEC9\\\\uDF30-\\\\uDF39]|\\\\uD806[\\\\uDCE0-\\\\uDCE9\\\\uDD50-\\\\uDD59]|\\\\uD807[\\\\uDC50-\\\\uDC59\\\\uDD50-\\\\uDD59\\\\uDDA0-\\\\uDDA9\\\\uDF50-\\\\uDF59]|\\\\uD81A[\\\\uDE60-\\\\uDE69\\\\uDEC0-\\\\uDEC9\\\\uDF50-\\\\uDF59]|\\\\uD835[\\\\uDFCE-\\\\uDFFF]|\\\\uD838[\\\\uDD40-\\\\uDD49\\\\uDEF0-\\\\uDEF9]|\\\\uD839[\\\\uDCF0-\\\\uDCF9]|\\\\uD83A[\\\\uDD50-\\\\uDD59]|\\\\uD83E[\\\\uDFF0-\\\\uDFF9])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$OLetter\": \"((?:[\\\\u01BB\\\\u01C0-\\\\u01C3\\\\u0294\\\\u02B9-\\\\u02BF\\\\u02C6-\\\\u02D1\\\\u02EC\\\\u02EE\\\\u0374\\\\u0559\\\\u05D0-\\\\u05EA\\\\u05EF-\\\\u05F3\\\\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\\\\u10D0-\\\\u10FA\\\\u10FD-\\\\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\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\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\\\\u1C90-\\\\u1CBA\\\\u1CBD-\\\\u1CBF\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF3\\\\u1CF5\\\\u1CF6\\\\u1CFA\\\\u2135-\\\\u2138\\\\u2180-\\\\u2182\\\\u2185-\\\\u2188\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312F\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BF\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DBF\\\\u4E00-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA66E\\\\uA67F\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA788\\\\uA78F\\\\uA7F7\\\\uA7FB-\\\\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\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\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\\\\uFF66-\\\\uFF9D\\\\uFFA0-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]|\\\\uD800[\\\\uDC00-\\\\uDC0B\\\\uDC0D-\\\\uDC26\\\\uDC28-\\\\uDC3A\\\\uDC3C\\\\uDC3D\\\\uDC3F-\\\\uDC4D\\\\uDC50-\\\\uDC5D\\\\uDC80-\\\\uDCFA\\\\uDD40-\\\\uDD74\\\\uDE80-\\\\uDE9C\\\\uDEA0-\\\\uDED0\\\\uDF00-\\\\uDF1F\\\\uDF2D-\\\\uDF4A\\\\uDF50-\\\\uDF75\\\\uDF80-\\\\uDF9D\\\\uDFA0-\\\\uDFC3\\\\uDFC8-\\\\uDFCF\\\\uDFD1-\\\\uDFD5]|\\\\uD801[\\\\uDC50-\\\\uDC9D\\\\uDD00-\\\\uDD27\\\\uDD30-\\\\uDD63\\\\uDE00-\\\\uDF36\\\\uDF40-\\\\uDF55\\\\uDF60-\\\\uDF67\\\\uDF81\\\\uDF82]|\\\\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\\\\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\\\\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[\\\\uDC00-\\\\uDC6E\\\\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[\\\\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]|\\\\uD837\\\\uDF0A|\\\\uD838[\\\\uDD00-\\\\uDD2C\\\\uDD37-\\\\uDD3D\\\\uDD4E\\\\uDE90-\\\\uDEAD\\\\uDEC0-\\\\uDEEB]|\\\\uD839[\\\\uDCD0-\\\\uDCEB\\\\uDFE0-\\\\uDFE6\\\\uDFE8-\\\\uDFEB\\\\uDFED\\\\uDFEE\\\\uDFF0-\\\\uDFFE]|\\\\uD83A[\\\\uDC00-\\\\uDCC4\\\\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]|\\\\uD87E[\\\\uDC00-\\\\uDE1D]|\\\\uD884[\\\\uDC00-\\\\uDF4A\\\\uDF50-\\\\uDFFF]|\\\\uD888[\\\\uDC00-\\\\uDFAF])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$ParaSep\": \"([\\\\x85\\\\u2028\\\\u2029]|\\\\r|\\\\n)\",\n \"$SATerm\": \"(((?:[!\\\\?\\\\u0589\\\\u061D-\\\\u061F\\\\u06D4\\\\u0700-\\\\u0702\\\\u07F9\\\\u0837\\\\u0839\\\\u083D\\\\u083E\\\\u0964\\\\u0965\\\\u104A\\\\u104B\\\\u1362\\\\u1367\\\\u1368\\\\u166E\\\\u1735\\\\u1736\\\\u1803\\\\u1809\\\\u1944\\\\u1945\\\\u1AA8-\\\\u1AAB\\\\u1B5A\\\\u1B5B\\\\u1B5E\\\\u1B5F\\\\u1B7D\\\\u1B7E\\\\u1C3B\\\\u1C3C\\\\u1C7E\\\\u1C7F\\\\u203C\\\\u203D\\\\u2047-\\\\u2049\\\\u2E2E\\\\u2E3C\\\\u2E53\\\\u2E54\\\\u3002\\\\uA4FF\\\\uA60E\\\\uA60F\\\\uA6F3\\\\uA6F7\\\\uA876\\\\uA877\\\\uA8CE\\\\uA8CF\\\\uA92F\\\\uA9C8\\\\uA9C9\\\\uAA5D-\\\\uAA5F\\\\uAAF0\\\\uAAF1\\\\uABEB\\\\uFE56\\\\uFE57\\\\uFF01\\\\uFF1F\\\\uFF61]|\\\\uD802[\\\\uDE56\\\\uDE57]|\\\\uD803[\\\\uDF55-\\\\uDF59\\\\uDF86-\\\\uDF89]|\\\\uD804[\\\\uDC47\\\\uDC48\\\\uDCBE-\\\\uDCC1\\\\uDD41-\\\\uDD43\\\\uDDC5\\\\uDDC6\\\\uDDCD\\\\uDDDE\\\\uDDDF\\\\uDE38\\\\uDE39\\\\uDE3B\\\\uDE3C\\\\uDEA9]|\\\\uD805[\\\\uDC4B\\\\uDC4C\\\\uDDC2\\\\uDDC3\\\\uDDC9-\\\\uDDD7\\\\uDE41\\\\uDE42\\\\uDF3C-\\\\uDF3E]|\\\\uD806[\\\\uDD44\\\\uDD46\\\\uDE42\\\\uDE43\\\\uDE9B\\\\uDE9C]|\\\\uD807[\\\\uDC41\\\\uDC42\\\\uDEF7\\\\uDEF8\\\\uDF43\\\\uDF44]|\\\\uD81A[\\\\uDE6E\\\\uDE6F\\\\uDEF5\\\\uDF37\\\\uDF38\\\\uDF44]|\\\\uD81B\\\\uDE98|\\\\uD82F\\\\uDC9F|\\\\uD836\\\\uDE88)(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)|([\\\\.\\\\u2024\\\\uFE52\\\\uFF0E](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*))\",\n \"$SContinue\": \"([,\\\\x2D:\\\\u055D\\\\u060C\\\\u060D\\\\u07F8\\\\u1802\\\\u1808\\\\u2013\\\\u2014\\\\u3001\\\\uFE10\\\\uFE11\\\\uFE13\\\\uFE31\\\\uFE32\\\\uFE50\\\\uFE51\\\\uFE55\\\\uFE58\\\\uFE63\\\\uFF0C\\\\uFF0D\\\\uFF1A\\\\uFF64](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$STerm\": \"((?:[!\\\\?\\\\u0589\\\\u061D-\\\\u061F\\\\u06D4\\\\u0700-\\\\u0702\\\\u07F9\\\\u0837\\\\u0839\\\\u083D\\\\u083E\\\\u0964\\\\u0965\\\\u104A\\\\u104B\\\\u1362\\\\u1367\\\\u1368\\\\u166E\\\\u1735\\\\u1736\\\\u1803\\\\u1809\\\\u1944\\\\u1945\\\\u1AA8-\\\\u1AAB\\\\u1B5A\\\\u1B5B\\\\u1B5E\\\\u1B5F\\\\u1B7D\\\\u1B7E\\\\u1C3B\\\\u1C3C\\\\u1C7E\\\\u1C7F\\\\u203C\\\\u203D\\\\u2047-\\\\u2049\\\\u2E2E\\\\u2E3C\\\\u2E53\\\\u2E54\\\\u3002\\\\uA4FF\\\\uA60E\\\\uA60F\\\\uA6F3\\\\uA6F7\\\\uA876\\\\uA877\\\\uA8CE\\\\uA8CF\\\\uA92F\\\\uA9C8\\\\uA9C9\\\\uAA5D-\\\\uAA5F\\\\uAAF0\\\\uAAF1\\\\uABEB\\\\uFE56\\\\uFE57\\\\uFF01\\\\uFF1F\\\\uFF61]|\\\\uD802[\\\\uDE56\\\\uDE57]|\\\\uD803[\\\\uDF55-\\\\uDF59\\\\uDF86-\\\\uDF89]|\\\\uD804[\\\\uDC47\\\\uDC48\\\\uDCBE-\\\\uDCC1\\\\uDD41-\\\\uDD43\\\\uDDC5\\\\uDDC6\\\\uDDCD\\\\uDDDE\\\\uDDDF\\\\uDE38\\\\uDE39\\\\uDE3B\\\\uDE3C\\\\uDEA9]|\\\\uD805[\\\\uDC4B\\\\uDC4C\\\\uDDC2\\\\uDDC3\\\\uDDC9-\\\\uDDD7\\\\uDE41\\\\uDE42\\\\uDF3C-\\\\uDF3E]|\\\\uD806[\\\\uDD44\\\\uDD46\\\\uDE42\\\\uDE43\\\\uDE9B\\\\uDE9C]|\\\\uD807[\\\\uDC41\\\\uDC42\\\\uDEF7\\\\uDEF8\\\\uDF43\\\\uDF44]|\\\\uD81A[\\\\uDE6E\\\\uDE6F\\\\uDEF5\\\\uDF37\\\\uDF38\\\\uDF44]|\\\\uD81B\\\\uDE98|\\\\uD82F\\\\uDC9F|\\\\uD836\\\\uDE88)(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Sep\": \"[\\\\x85\\\\u2028\\\\u2029]\",\n \"$Sp\": \"([\\\\t\\\\x0B\\\\f \\\\xA0\\\\u1680\\\\u2000-\\\\u200A\\\\u202F\\\\u205F\\\\u3000](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Upper\": \"((?:[A-Z\\\\xC0-\\\\xD6\\\\xD8-\\\\xDE\\\\u0100\\\\u0102\\\\u0104\\\\u0106\\\\u0108\\\\u010A\\\\u010C\\\\u010E\\\\u0110\\\\u0112\\\\u0114\\\\u0116\\\\u0118\\\\u011A\\\\u011C\\\\u011E\\\\u0120\\\\u0122\\\\u0124\\\\u0126\\\\u0128\\\\u012A\\\\u012C\\\\u012E\\\\u0130\\\\u0132\\\\u0134\\\\u0136\\\\u0139\\\\u013B\\\\u013D\\\\u013F\\\\u0141\\\\u0143\\\\u0145\\\\u0147\\\\u014A\\\\u014C\\\\u014E\\\\u0150\\\\u0152\\\\u0154\\\\u0156\\\\u0158\\\\u015A\\\\u015C\\\\u015E\\\\u0160\\\\u0162\\\\u0164\\\\u0166\\\\u0168\\\\u016A\\\\u016C\\\\u016E\\\\u0170\\\\u0172\\\\u0174\\\\u0176\\\\u0178\\\\u0179\\\\u017B\\\\u017D\\\\u0181\\\\u0182\\\\u0184\\\\u0186\\\\u0187\\\\u0189-\\\\u018B\\\\u018E-\\\\u0191\\\\u0193\\\\u0194\\\\u0196-\\\\u0198\\\\u019C\\\\u019D\\\\u019F\\\\u01A0\\\\u01A2\\\\u01A4\\\\u01A6\\\\u01A7\\\\u01A9\\\\u01AC\\\\u01AE\\\\u01AF\\\\u01B1-\\\\u01B3\\\\u01B5\\\\u01B7\\\\u01B8\\\\u01BC\\\\u01C4\\\\u01C5\\\\u01C7\\\\u01C8\\\\u01CA\\\\u01CB\\\\u01CD\\\\u01CF\\\\u01D1\\\\u01D3\\\\u01D5\\\\u01D7\\\\u01D9\\\\u01DB\\\\u01DE\\\\u01E0\\\\u01E2\\\\u01E4\\\\u01E6\\\\u01E8\\\\u01EA\\\\u01EC\\\\u01EE\\\\u01F1\\\\u01F2\\\\u01F4\\\\u01F6-\\\\u01F8\\\\u01FA\\\\u01FC\\\\u01FE\\\\u0200\\\\u0202\\\\u0204\\\\u0206\\\\u0208\\\\u020A\\\\u020C\\\\u020E\\\\u0210\\\\u0212\\\\u0214\\\\u0216\\\\u0218\\\\u021A\\\\u021C\\\\u021E\\\\u0220\\\\u0222\\\\u0224\\\\u0226\\\\u0228\\\\u022A\\\\u022C\\\\u022E\\\\u0230\\\\u0232\\\\u023A\\\\u023B\\\\u023D\\\\u023E\\\\u0241\\\\u0243-\\\\u0246\\\\u0248\\\\u024A\\\\u024C\\\\u024E\\\\u0370\\\\u0372\\\\u0376\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E\\\\u038F\\\\u0391-\\\\u03A1\\\\u03A3-\\\\u03AB\\\\u03CF\\\\u03D2-\\\\u03D4\\\\u03D8\\\\u03DA\\\\u03DC\\\\u03DE\\\\u03E0\\\\u03E2\\\\u03E4\\\\u03E6\\\\u03E8\\\\u03EA\\\\u03EC\\\\u03EE\\\\u03F4\\\\u03F7\\\\u03F9\\\\u03FA\\\\u03FD-\\\\u042F\\\\u0460\\\\u0462\\\\u0464\\\\u0466\\\\u0468\\\\u046A\\\\u046C\\\\u046E\\\\u0470\\\\u0472\\\\u0474\\\\u0476\\\\u0478\\\\u047A\\\\u047C\\\\u047E\\\\u0480\\\\u048A\\\\u048C\\\\u048E\\\\u0490\\\\u0492\\\\u0494\\\\u0496\\\\u0498\\\\u049A\\\\u049C\\\\u049E\\\\u04A0\\\\u04A2\\\\u04A4\\\\u04A6\\\\u04A8\\\\u04AA\\\\u04AC\\\\u04AE\\\\u04B0\\\\u04B2\\\\u04B4\\\\u04B6\\\\u04B8\\\\u04BA\\\\u04BC\\\\u04BE\\\\u04C0\\\\u04C1\\\\u04C3\\\\u04C5\\\\u04C7\\\\u04C9\\\\u04CB\\\\u04CD\\\\u04D0\\\\u04D2\\\\u04D4\\\\u04D6\\\\u04D8\\\\u04DA\\\\u04DC\\\\u04DE\\\\u04E0\\\\u04E2\\\\u04E4\\\\u04E6\\\\u04E8\\\\u04EA\\\\u04EC\\\\u04EE\\\\u04F0\\\\u04F2\\\\u04F4\\\\u04F6\\\\u04F8\\\\u04FA\\\\u04FC\\\\u04FE\\\\u0500\\\\u0502\\\\u0504\\\\u0506\\\\u0508\\\\u050A\\\\u050C\\\\u050E\\\\u0510\\\\u0512\\\\u0514\\\\u0516\\\\u0518\\\\u051A\\\\u051C\\\\u051E\\\\u0520\\\\u0522\\\\u0524\\\\u0526\\\\u0528\\\\u052A\\\\u052C\\\\u052E\\\\u0531-\\\\u0556\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u13A0-\\\\u13F5\\\\u1E00\\\\u1E02\\\\u1E04\\\\u1E06\\\\u1E08\\\\u1E0A\\\\u1E0C\\\\u1E0E\\\\u1E10\\\\u1E12\\\\u1E14\\\\u1E16\\\\u1E18\\\\u1E1A\\\\u1E1C\\\\u1E1E\\\\u1E20\\\\u1E22\\\\u1E24\\\\u1E26\\\\u1E28\\\\u1E2A\\\\u1E2C\\\\u1E2E\\\\u1E30\\\\u1E32\\\\u1E34\\\\u1E36\\\\u1E38\\\\u1E3A\\\\u1E3C\\\\u1E3E\\\\u1E40\\\\u1E42\\\\u1E44\\\\u1E46\\\\u1E48\\\\u1E4A\\\\u1E4C\\\\u1E4E\\\\u1E50\\\\u1E52\\\\u1E54\\\\u1E56\\\\u1E58\\\\u1E5A\\\\u1E5C\\\\u1E5E\\\\u1E60\\\\u1E62\\\\u1E64\\\\u1E66\\\\u1E68\\\\u1E6A\\\\u1E6C\\\\u1E6E\\\\u1E70\\\\u1E72\\\\u1E74\\\\u1E76\\\\u1E78\\\\u1E7A\\\\u1E7C\\\\u1E7E\\\\u1E80\\\\u1E82\\\\u1E84\\\\u1E86\\\\u1E88\\\\u1E8A\\\\u1E8C\\\\u1E8E\\\\u1E90\\\\u1E92\\\\u1E94\\\\u1E9E\\\\u1EA0\\\\u1EA2\\\\u1EA4\\\\u1EA6\\\\u1EA8\\\\u1EAA\\\\u1EAC\\\\u1EAE\\\\u1EB0\\\\u1EB2\\\\u1EB4\\\\u1EB6\\\\u1EB8\\\\u1EBA\\\\u1EBC\\\\u1EBE\\\\u1EC0\\\\u1EC2\\\\u1EC4\\\\u1EC6\\\\u1EC8\\\\u1ECA\\\\u1ECC\\\\u1ECE\\\\u1ED0\\\\u1ED2\\\\u1ED4\\\\u1ED6\\\\u1ED8\\\\u1EDA\\\\u1EDC\\\\u1EDE\\\\u1EE0\\\\u1EE2\\\\u1EE4\\\\u1EE6\\\\u1EE8\\\\u1EEA\\\\u1EEC\\\\u1EEE\\\\u1EF0\\\\u1EF2\\\\u1EF4\\\\u1EF6\\\\u1EF8\\\\u1EFA\\\\u1EFC\\\\u1EFE\\\\u1F08-\\\\u1F0F\\\\u1F18-\\\\u1F1D\\\\u1F28-\\\\u1F2F\\\\u1F38-\\\\u1F3F\\\\u1F48-\\\\u1F4D\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F\\\\u1F68-\\\\u1F6F\\\\u1F88-\\\\u1F8F\\\\u1F98-\\\\u1F9F\\\\u1FA8-\\\\u1FAF\\\\u1FB8-\\\\u1FBC\\\\u1FC8-\\\\u1FCC\\\\u1FD8-\\\\u1FDB\\\\u1FE8-\\\\u1FEC\\\\u1FF8-\\\\u1FFC\\\\u2102\\\\u2107\\\\u210B-\\\\u210D\\\\u2110-\\\\u2112\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u2130-\\\\u2133\\\\u213E\\\\u213F\\\\u2145\\\\u2160-\\\\u216F\\\\u2183\\\\u24B6-\\\\u24CF\\\\u2C00-\\\\u2C2F\\\\u2C60\\\\u2C62-\\\\u2C64\\\\u2C67\\\\u2C69\\\\u2C6B\\\\u2C6D-\\\\u2C70\\\\u2C72\\\\u2C75\\\\u2C7E-\\\\u2C80\\\\u2C82\\\\u2C84\\\\u2C86\\\\u2C88\\\\u2C8A\\\\u2C8C\\\\u2C8E\\\\u2C90\\\\u2C92\\\\u2C94\\\\u2C96\\\\u2C98\\\\u2C9A\\\\u2C9C\\\\u2C9E\\\\u2CA0\\\\u2CA2\\\\u2CA4\\\\u2CA6\\\\u2CA8\\\\u2CAA\\\\u2CAC\\\\u2CAE\\\\u2CB0\\\\u2CB2\\\\u2CB4\\\\u2CB6\\\\u2CB8\\\\u2CBA\\\\u2CBC\\\\u2CBE\\\\u2CC0\\\\u2CC2\\\\u2CC4\\\\u2CC6\\\\u2CC8\\\\u2CCA\\\\u2CCC\\\\u2CCE\\\\u2CD0\\\\u2CD2\\\\u2CD4\\\\u2CD6\\\\u2CD8\\\\u2CDA\\\\u2CDC\\\\u2CDE\\\\u2CE0\\\\u2CE2\\\\u2CEB\\\\u2CED\\\\u2CF2\\\\uA640\\\\uA642\\\\uA644\\\\uA646\\\\uA648\\\\uA64A\\\\uA64C\\\\uA64E\\\\uA650\\\\uA652\\\\uA654\\\\uA656\\\\uA658\\\\uA65A\\\\uA65C\\\\uA65E\\\\uA660\\\\uA662\\\\uA664\\\\uA666\\\\uA668\\\\uA66A\\\\uA66C\\\\uA680\\\\uA682\\\\uA684\\\\uA686\\\\uA688\\\\uA68A\\\\uA68C\\\\uA68E\\\\uA690\\\\uA692\\\\uA694\\\\uA696\\\\uA698\\\\uA69A\\\\uA722\\\\uA724\\\\uA726\\\\uA728\\\\uA72A\\\\uA72C\\\\uA72E\\\\uA732\\\\uA734\\\\uA736\\\\uA738\\\\uA73A\\\\uA73C\\\\uA73E\\\\uA740\\\\uA742\\\\uA744\\\\uA746\\\\uA748\\\\uA74A\\\\uA74C\\\\uA74E\\\\uA750\\\\uA752\\\\uA754\\\\uA756\\\\uA758\\\\uA75A\\\\uA75C\\\\uA75E\\\\uA760\\\\uA762\\\\uA764\\\\uA766\\\\uA768\\\\uA76A\\\\uA76C\\\\uA76E\\\\uA779\\\\uA77B\\\\uA77D\\\\uA77E\\\\uA780\\\\uA782\\\\uA784\\\\uA786\\\\uA78B\\\\uA78D\\\\uA790\\\\uA792\\\\uA796\\\\uA798\\\\uA79A\\\\uA79C\\\\uA79E\\\\uA7A0\\\\uA7A2\\\\uA7A4\\\\uA7A6\\\\uA7A8\\\\uA7AA-\\\\uA7AE\\\\uA7B0-\\\\uA7B4\\\\uA7B6\\\\uA7B8\\\\uA7BA\\\\uA7BC\\\\uA7BE\\\\uA7C0\\\\uA7C2\\\\uA7C4-\\\\uA7C7\\\\uA7C9\\\\uA7D0\\\\uA7D6\\\\uA7D8\\\\uA7F5\\\\uFF21-\\\\uFF3A]|\\\\uD801[\\\\uDC00-\\\\uDC27\\\\uDCB0-\\\\uDCD3\\\\uDD70-\\\\uDD7A\\\\uDD7C-\\\\uDD8A\\\\uDD8C-\\\\uDD92\\\\uDD94\\\\uDD95]|\\\\uD803[\\\\uDC80-\\\\uDCB2]|\\\\uD806[\\\\uDCA0-\\\\uDCBF]|\\\\uD81B[\\\\uDE40-\\\\uDE5F]|\\\\uD835[\\\\uDC00-\\\\uDC19\\\\uDC34-\\\\uDC4D\\\\uDC68-\\\\uDC81\\\\uDC9C\\\\uDC9E\\\\uDC9F\\\\uDCA2\\\\uDCA5\\\\uDCA6\\\\uDCA9-\\\\uDCAC\\\\uDCAE-\\\\uDCB5\\\\uDCD0-\\\\uDCE9\\\\uDD04\\\\uDD05\\\\uDD07-\\\\uDD0A\\\\uDD0D-\\\\uDD14\\\\uDD16-\\\\uDD1C\\\\uDD38\\\\uDD39\\\\uDD3B-\\\\uDD3E\\\\uDD40-\\\\uDD44\\\\uDD46\\\\uDD4A-\\\\uDD50\\\\uDD6C-\\\\uDD85\\\\uDDA0-\\\\uDDB9\\\\uDDD4-\\\\uDDED\\\\uDE08-\\\\uDE21\\\\uDE3C-\\\\uDE55\\\\uDE70-\\\\uDE89\\\\uDEA8-\\\\uDEC0\\\\uDEE2-\\\\uDEFA\\\\uDF1C-\\\\uDF34\\\\uDF56-\\\\uDF6E\\\\uDF90-\\\\uDFA8\\\\uDFCA]|\\\\uD83A[\\\\uDD00-\\\\uDD21]|\\\\uD83C[\\\\uDD30-\\\\uDD49\\\\uDD50-\\\\uDD69\\\\uDD70-\\\\uDD89])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\"\n }\n },\n \"word\": {\n \"segmentRules\": {\n \"10\": {\n \"after\": \"$AHLetter\",\n \"before\": \"$Numeric\",\n \"breaks\": false\n },\n \"11\": {\n \"after\": \"$Numeric\",\n \"before\": \"$Numeric($MidNum|$MidNumLetQ)\",\n \"breaks\": false\n },\n \"12\": {\n \"after\": \"($MidNum|$MidNumLetQ)$Numeric\",\n \"before\": \"$Numeric\",\n \"breaks\": false\n },\n \"13\": {\n \"after\": \"$Katakana\",\n \"before\": \"$Katakana\",\n \"breaks\": false\n },\n \"13.1\": {\n \"after\": \"$ExtendNumLet\",\n \"before\": \"($AHLetter|$Numeric|$Katakana|$ExtendNumLet)\",\n \"breaks\": false\n },\n \"13.2\": {\n \"after\": \"($AHLetter|$Numeric|$Katakana)\",\n \"before\": \"$ExtendNumLet\",\n \"breaks\": false\n },\n \"15\": {\n \"after\": \"$RI\",\n \"before\": \"^($RI$RI)*$RI\",\n \"breaks\": false\n },\n \"16\": {\n \"after\": \"$RI\",\n \"before\": \"[^\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF\\\\uDCEC-\\\\uDCEF\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A\\\\uDDE6-\\\\uDDFF\\\\uDFFB-\\\\uDFFF\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF]($RI$RI)*$RI\",\n \"breaks\": false\n },\n \"3\": {\n \"after\": \"$LF\",\n \"before\": \"$CR\",\n \"breaks\": false\n },\n \"3.1\": {\n \"before\": \"($Newline|$CR|$LF)\",\n \"breaks\": true\n },\n \"3.2\": {\n \"after\": \"($Newline|$CR|$LF)\",\n \"breaks\": true\n },\n \"3.3\": {\n \"after\": \"$ExtPict\",\n \"before\": \"$ZWJ\",\n \"breaks\": false\n },\n \"3.4\": {\n \"after\": \"$WSegSpace\",\n \"before\": \"$WSegSpace\",\n \"breaks\": false\n },\n \"4\": {\n \"after\": \"(?:$Format|$Extend|$ZWJ)\",\n \"before\": \"$NotBreak_\",\n \"breaks\": false\n },\n \"5\": {\n \"after\": \"$AHLetter\",\n \"before\": \"$AHLetter\",\n \"breaks\": false\n },\n \"6\": {\n \"after\": \"($MidLetter|$MidNumLetQ)$AHLetter\",\n \"before\": \"$AHLetter\",\n \"breaks\": false\n },\n \"7\": {\n \"after\": \"$AHLetter\",\n \"before\": \"$AHLetter($MidLetter|$MidNumLetQ)\",\n \"breaks\": false\n },\n \"7.1\": {\n \"after\": \"$Single_Quote\",\n \"before\": \"$Hebrew_Letter\",\n \"breaks\": false\n },\n \"7.2\": {\n \"after\": \"$Double_Quote$Hebrew_Letter\",\n \"before\": \"$Hebrew_Letter\",\n \"breaks\": false\n },\n \"7.3\": {\n \"after\": \"$Hebrew_Letter\",\n \"before\": \"$Hebrew_Letter$Double_Quote\",\n \"breaks\": false\n },\n \"8\": {\n \"after\": \"$Numeric\",\n \"before\": \"$Numeric\",\n \"breaks\": false\n },\n \"9\": {\n \"after\": \"$Numeric\",\n \"before\": \"$AHLetter\",\n \"breaks\": false\n }\n },\n \"suppressions\": [],\n \"variables\": {\n \"$AHLetter\": \"(((?:[A-Za-z\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02D7\\\\u02DE-\\\\u02FF\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559-\\\\u055C\\\\u055E\\\\u0560-\\\\u0588\\\\u058A\\\\u05F3\\\\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\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u1711\\\\u171F-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1820-\\\\u1878\\\\u1880-\\\\u1884\\\\u1887-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1A00-\\\\u1A16\\\\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\\\\u2160-\\\\u2188\\\\u24B6-\\\\u24E9\\\\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\\\\u303B\\\\u303C\\\\u3105-\\\\u312F\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BF\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA708-\\\\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\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB69\\\\uAB70-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB50-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFFA0-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]|\\\\uD800[\\\\uDC00-\\\\uDC0B\\\\uDC0D-\\\\uDC26\\\\uDC28-\\\\uDC3A\\\\uDC3C\\\\uDC3D\\\\uDC3F-\\\\uDC4D\\\\uDC50-\\\\uDC5D\\\\uDC80-\\\\uDCFA\\\\uDD40-\\\\uDD74\\\\uDE80-\\\\uDE9C\\\\uDEA0-\\\\uDED0\\\\uDF00-\\\\uDF1F\\\\uDF2D-\\\\uDF4A\\\\uDF50-\\\\uDF75\\\\uDF80-\\\\uDF9D\\\\uDFA0-\\\\uDFC3\\\\uDFC8-\\\\uDFCF\\\\uDFD1-\\\\uDFD5]|\\\\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]|\\\\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[\\\\uDC00-\\\\uDC6E\\\\uDC80-\\\\uDD43]|\\\\uD80B[\\\\uDF90-\\\\uDFF0]|\\\\uD80C[\\\\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]|\\\\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]|\\\\uD83C[\\\\uDD30-\\\\uDD49\\\\uDD50-\\\\uDD69\\\\uDD70-\\\\uDD89])|[\\\\u05D0-\\\\u05EA\\\\u05EF-\\\\u05F2\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFB4F])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$ALetter\": \"((?:[A-Za-z\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02D7\\\\u02DE-\\\\u02FF\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559-\\\\u055C\\\\u055E\\\\u0560-\\\\u0588\\\\u058A\\\\u05F3\\\\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\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u1711\\\\u171F-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1820-\\\\u1878\\\\u1880-\\\\u1884\\\\u1887-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1A00-\\\\u1A16\\\\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\\\\u2160-\\\\u2188\\\\u24B6-\\\\u24E9\\\\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\\\\u303B\\\\u303C\\\\u3105-\\\\u312F\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BF\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA708-\\\\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\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB69\\\\uAB70-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB50-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFFA0-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]|\\\\uD800[\\\\uDC00-\\\\uDC0B\\\\uDC0D-\\\\uDC26\\\\uDC28-\\\\uDC3A\\\\uDC3C\\\\uDC3D\\\\uDC3F-\\\\uDC4D\\\\uDC50-\\\\uDC5D\\\\uDC80-\\\\uDCFA\\\\uDD40-\\\\uDD74\\\\uDE80-\\\\uDE9C\\\\uDEA0-\\\\uDED0\\\\uDF00-\\\\uDF1F\\\\uDF2D-\\\\uDF4A\\\\uDF50-\\\\uDF75\\\\uDF80-\\\\uDF9D\\\\uDFA0-\\\\uDFC3\\\\uDFC8-\\\\uDFCF\\\\uDFD1-\\\\uDFD5]|\\\\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]|\\\\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[\\\\uDC00-\\\\uDC6E\\\\uDC80-\\\\uDD43]|\\\\uD80B[\\\\uDF90-\\\\uDFF0]|\\\\uD80C[\\\\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]|\\\\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]|\\\\uD83C[\\\\uDD30-\\\\uDD49\\\\uDD50-\\\\uDD69\\\\uDD70-\\\\uDD89])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$CR\": \"\\\\r\",\n \"$Double_Quote\": \"(\\\"(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$ExtPict\": \"(?:[\\\\xA9\\\\xAE\\\\u203C\\\\u2049\\\\u2122\\\\u2139\\\\u2194-\\\\u2199\\\\u21A9\\\\u21AA\\\\u231A\\\\u231B\\\\u2328\\\\u2388\\\\u23CF\\\\u23E9-\\\\u23F3\\\\u23F8-\\\\u23FA\\\\u24C2\\\\u25AA\\\\u25AB\\\\u25B6\\\\u25C0\\\\u25FB-\\\\u25FE\\\\u2600-\\\\u2605\\\\u2607-\\\\u2612\\\\u2614-\\\\u2685\\\\u2690-\\\\u2705\\\\u2708-\\\\u2712\\\\u2714\\\\u2716\\\\u271D\\\\u2721\\\\u2728\\\\u2733\\\\u2734\\\\u2744\\\\u2747\\\\u274C\\\\u274E\\\\u2753-\\\\u2755\\\\u2757\\\\u2763-\\\\u2767\\\\u2795-\\\\u2797\\\\u27A1\\\\u27B0\\\\u27BF\\\\u2934\\\\u2935\\\\u2B05-\\\\u2B07\\\\u2B1B\\\\u2B1C\\\\u2B50\\\\u2B55\\\\u3030\\\\u303D\\\\u3297\\\\u3299]|\\\\uD83C[\\\\uDC00-\\\\uDCFF\\\\uDD0D-\\\\uDD0F\\\\uDD2F\\\\uDD6C-\\\\uDD71\\\\uDD7E\\\\uDD7F\\\\uDD8E\\\\uDD91-\\\\uDD9A\\\\uDDAD-\\\\uDDE5\\\\uDE01-\\\\uDE0F\\\\uDE1A\\\\uDE2F\\\\uDE32-\\\\uDE3A\\\\uDE3C-\\\\uDE3F\\\\uDE49-\\\\uDFFA]|\\\\uD83D[\\\\uDC00-\\\\uDD3D\\\\uDD46-\\\\uDE4F\\\\uDE80-\\\\uDEFF\\\\uDF74-\\\\uDF7F\\\\uDFD5-\\\\uDFFF]|\\\\uD83E[\\\\uDC0C-\\\\uDC0F\\\\uDC48-\\\\uDC4F\\\\uDC5A-\\\\uDC5F\\\\uDC88-\\\\uDC8F\\\\uDCAE-\\\\uDCFF\\\\uDD0C-\\\\uDD3A\\\\uDD3C-\\\\uDD45\\\\uDD47-\\\\uDEFF]|\\\\uD83F[\\\\uDC00-\\\\uDFFD])\",\n \"$Extend\": \"(?:[\\\\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\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0898-\\\\u089F\\\\u08CA-\\\\u08E1\\\\u08E3-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFF9E\\\\uFF9F]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCC2\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD72\\\\uDD7B-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$ExtendNumLet\": \"([_\\\\u202F\\\\u203F\\\\u2040\\\\u2054\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFF3F](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$FE\": \"(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$Format\": \"(?:[\\\\xAD\\\\u0600-\\\\u0605\\\\u061C\\\\u06DD\\\\u070F\\\\u0890\\\\u0891\\\\u08E2\\\\u180E\\\\u200E\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\uFEFF\\\\uFFF9-\\\\uFFFB]|\\\\uD804[\\\\uDCBD\\\\uDCCD]|\\\\uD80D[\\\\uDC30-\\\\uDC3F]|\\\\uD82F[\\\\uDCA0-\\\\uDCA3]|\\\\uD834[\\\\uDD73-\\\\uDD7A]|\\\\uDB40\\\\uDC01)\",\n \"$Hebrew_Letter\": \"([\\\\u05D0-\\\\u05EA\\\\u05EF-\\\\u05F2\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFB4F](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Katakana\": \"((?:[\\\\u3031-\\\\u3035\\\\u309B\\\\u309C\\\\u30A0-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u31F0-\\\\u31FF\\\\u32D0-\\\\u32FE\\\\u3300-\\\\u3357\\\\uFF66-\\\\uFF9D]|\\\\uD82B[\\\\uDFF0-\\\\uDFF3\\\\uDFF5-\\\\uDFFB\\\\uDFFD\\\\uDFFE]|\\\\uD82C[\\\\uDC00\\\\uDD20-\\\\uDD22\\\\uDD55\\\\uDD64-\\\\uDD67])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$LF\": \"\\\\n\",\n \"$MidLetter\": \"([\\\\xB7\\\\u0387\\\\u055F\\\\u05F4\\\\u2027\\\\uFE13](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$MidNum\": \"([,;\\\\u037E\\\\u0589\\\\u060C\\\\u060D\\\\u066C\\\\u07F8\\\\u2044\\\\uFE10\\\\uFE14\\\\uFE50\\\\uFE54\\\\uFF0C\\\\uFF1B](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$MidNumLet\": \"([\\\\.\\\\u2018\\\\u2019\\\\u2024\\\\uFE52\\\\uFF07\\\\uFF0E](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$MidNumLetQ\": \"(([\\\\.\\\\u2018\\\\u2019\\\\u2024\\\\uFE52\\\\uFF07\\\\uFF0E]|')(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Newline\": \"[\\\\x0B\\\\f\\\\x85\\\\u2028\\\\u2029]\",\n \"$NotBreak_\": \"(?:(?![\\\\n-\\\\r\\\\x85\\\\u2028\\\\u2029])[\\\\s\\\\S])\",\n \"$Numeric\": \"((?:[0-9\\\\u0660-\\\\u0669\\\\u066B\\\\u06F0-\\\\u06F9\\\\u07C0-\\\\u07C9\\\\u0966-\\\\u096F\\\\u09E6-\\\\u09EF\\\\u0A66-\\\\u0A6F\\\\u0AE6-\\\\u0AEF\\\\u0B66-\\\\u0B6F\\\\u0BE6-\\\\u0BEF\\\\u0C66-\\\\u0C6F\\\\u0CE6-\\\\u0CEF\\\\u0D66-\\\\u0D6F\\\\u0DE6-\\\\u0DEF\\\\u0E50-\\\\u0E59\\\\u0ED0-\\\\u0ED9\\\\u0F20-\\\\u0F29\\\\u1040-\\\\u1049\\\\u1090-\\\\u1099\\\\u17E0-\\\\u17E9\\\\u1810-\\\\u1819\\\\u1946-\\\\u194F\\\\u19D0-\\\\u19D9\\\\u1A80-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1B50-\\\\u1B59\\\\u1BB0-\\\\u1BB9\\\\u1C40-\\\\u1C49\\\\u1C50-\\\\u1C59\\\\uA620-\\\\uA629\\\\uA8D0-\\\\uA8D9\\\\uA900-\\\\uA909\\\\uA9D0-\\\\uA9D9\\\\uA9F0-\\\\uA9F9\\\\uAA50-\\\\uAA59\\\\uABF0-\\\\uABF9\\\\uFF10-\\\\uFF19]|\\\\uD801[\\\\uDCA0-\\\\uDCA9]|\\\\uD803[\\\\uDD30-\\\\uDD39]|\\\\uD804[\\\\uDC66-\\\\uDC6F\\\\uDCF0-\\\\uDCF9\\\\uDD36-\\\\uDD3F\\\\uDDD0-\\\\uDDD9\\\\uDEF0-\\\\uDEF9]|\\\\uD805[\\\\uDC50-\\\\uDC59\\\\uDCD0-\\\\uDCD9\\\\uDE50-\\\\uDE59\\\\uDEC0-\\\\uDEC9\\\\uDF30-\\\\uDF39]|\\\\uD806[\\\\uDCE0-\\\\uDCE9\\\\uDD50-\\\\uDD59]|\\\\uD807[\\\\uDC50-\\\\uDC59\\\\uDD50-\\\\uDD59\\\\uDDA0-\\\\uDDA9\\\\uDF50-\\\\uDF59]|\\\\uD81A[\\\\uDE60-\\\\uDE69\\\\uDEC0-\\\\uDEC9\\\\uDF50-\\\\uDF59]|\\\\uD835[\\\\uDFCE-\\\\uDFFF]|\\\\uD838[\\\\uDD40-\\\\uDD49\\\\uDEF0-\\\\uDEF9]|\\\\uD839[\\\\uDCF0-\\\\uDCF9]|\\\\uD83A[\\\\uDD50-\\\\uDD59]|\\\\uD83E[\\\\uDFF0-\\\\uDFF9])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$RI\": \"((?:\\\\uD83C[\\\\uDDE6-\\\\uDDFF])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Single_Quote\": \"('(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$WSegSpace\": \"[ \\\\u1680\\\\u2000-\\\\u2006\\\\u2008-\\\\u200A\\\\u205F\\\\u3000]\",\n \"$ZWJ\": \"\\\\u200D\"\n }\n }\n },\n \"ru\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"руб.\",\n \"янв.\",\n \"до н. э.\",\n \"сент.\",\n \"тел.\",\n \"дек.\",\n \"февр.\",\n \"нояб.\",\n \"апр.\",\n \"н. э.\",\n \"окт.\",\n \"тыс.\",\n \"авг.\",\n \"проф.\",\n \"н.э.\",\n \"кв.\",\n \"ул.\",\n \"отд.\"\n ],\n \"variables\": {}\n }\n },\n \"zh\": {}\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isSurrogate = exports.replaceVariables = void 0;\nvar replaceVariables = function (variables, input) {\n var findVarRegex = /\\$[A-Za-z0-9_]+/gm;\n return input.replaceAll(findVarRegex, function (match) {\n if (!(match in variables)) {\n throw new Error(\"No such variable \".concat(match));\n }\n return variables[match];\n });\n};\nexports.replaceVariables = replaceVariables;\nvar isSurrogate = function (str, pos) {\n return (0xd800 <= str.charCodeAt(pos - 1) &&\n str.charCodeAt(pos - 1) <= 0xdbff &&\n 0xdc00 <= str.charCodeAt(pos) &&\n str.charCodeAt(pos) <= 0xdfff);\n};\nexports.isSurrogate = isSurrogate;\n// alternative surrogate check mimicking the java implementation\n// const TRAIL_SURROGATE_BITMASK = 0xfffffc00\n// const TRAIL_SURROGATE_BITS = 0xdc00\n// const LEAD_SURROGATE_BITMASK = 0xfffffc00\n// const LEAD_SURROGATE_BITS = 0xd800\n// const isSurrogate = (text: string, position: number) => {\n// if (\n// (text.charCodeAt(position - 1) & LEAD_SURROGATE_BITMASK) ==\n// LEAD_SURROGATE_BITS &&\n// (text.charCodeAt(position) & TRAIL_SURROGATE_BITMASK) ==\n// TRAIL_SURROGATE_BITS\n// ) {\n// return true\n// } else {\n// return false\n// }\n// }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Segmenter = void 0;\nvar tslib_1 = require(\"tslib\");\nvar cldr_segmentation_rules_generated_1 = require(\"./cldr-segmentation-rules.generated\");\nvar segmentation_utils_1 = require(\"./segmentation-utils\");\nvar ecma402_abstract_1 = require(\"@formatjs/ecma402-abstract\");\nvar intl_localematcher_1 = require(\"@formatjs/intl-localematcher\");\n/**\n * Adds $ to before rules and ^ to after rules for strickness\n * Replaces variables\n * Initializes the RegExp\n *\n * @param rule raw rule string from cldr-segmentation-rules.generated\n * @param variables\n * @param after appends ^ if true and $ if false\n * @returns\n */\nvar generateRuleRegex = function (rule, variables, after) {\n return new RegExp(\"\".concat(after ? '^' : '').concat((0, segmentation_utils_1.replaceVariables)(variables, rule)).concat(after ? '' : '$'));\n};\nvar prepareLocaleSegmentationRules = function (segmentationTypeValue) {\n var preparedRules = {};\n for (var _i = 0, _a = Object.keys(segmentationTypeValue.segmentRules); _i < _a.length; _i++) {\n var ruleNr = _a[_i];\n var ruleValue = segmentationTypeValue.segmentRules[ruleNr];\n var preparedRule = {\n breaks: ruleValue.breaks,\n };\n if ('before' in ruleValue && ruleValue.before) {\n preparedRule.before = generateRuleRegex(ruleValue.before, segmentationTypeValue.variables, false);\n }\n if ('after' in ruleValue && ruleValue.after) {\n preparedRule.after = generateRuleRegex(ruleValue.after, segmentationTypeValue.variables, true);\n }\n preparedRules[ruleNr] = preparedRule;\n }\n return preparedRules;\n};\nvar breaksAtResult = function (breaks, matchingRule) { return ({\n breaks: breaks,\n matchingRule: matchingRule,\n}); };\nvar Segmenter = /** @class */ (function () {\n function Segmenter(locales, options) {\n var _newTarget = this.constructor;\n if (_newTarget === undefined) {\n throw TypeError(\"Constructor Intl.Segmenter requires 'new'\");\n }\n var requestedLocales = (0, ecma402_abstract_1.CanonicalizeLocaleList)(locales);\n options = (0, ecma402_abstract_1.GetOptionsObject)(options);\n var opt = Object.create(null);\n var matcher = (0, ecma402_abstract_1.GetOption)(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');\n opt.localeMatcher = matcher;\n var granularity = (0, ecma402_abstract_1.GetOption)(options, 'granularity', 'string', ['word', 'sentence', 'grapheme'], 'grapheme');\n setSlot(this, 'granularity', granularity);\n //TODO: figure out correct availible locales\n var r = (0, intl_localematcher_1.ResolveLocale)(Segmenter.availableLocales, //availible locales\n requestedLocales, opt, [], // there is no relevantExtensionKeys\n {}, function () { return ''; } //use only root rules\n );\n setSlot(this, 'locale', r.locale);\n //root rules based on granularity\n this.mergedSegmentationTypeValue = cldr_segmentation_rules_generated_1.SegmentationRules.root[granularity];\n //merge root rules with locale ones if locale is specified\n if (r.locale.length) {\n var localeOverrides = cldr_segmentation_rules_generated_1.SegmentationRules[r.locale];\n if (granularity in localeOverrides) {\n var localeSegmentationTypeValue = localeOverrides[granularity];\n this.mergedSegmentationTypeValue.variables = tslib_1.__assign(tslib_1.__assign({}, this.mergedSegmentationTypeValue.variables), localeSegmentationTypeValue.variables);\n this.mergedSegmentationTypeValue.segmentRules = tslib_1.__assign(tslib_1.__assign({}, this.mergedSegmentationTypeValue.segmentRules), localeSegmentationTypeValue.segmentRules);\n this.mergedSegmentationTypeValue.suppressions = tslib_1.__spreadArray(tslib_1.__spreadArray([], this.mergedSegmentationTypeValue.suppressions, true), localeSegmentationTypeValue.suppressions, true);\n }\n }\n //prepare rules\n this.rules = prepareLocaleSegmentationRules(this.mergedSegmentationTypeValue);\n //order rule keys\n this.ruleSortedKeys = Object.keys(this.rules).sort(function (a, b) { return Number(a) - Number(b); });\n }\n Segmenter.prototype.breaksAt = function (position, input) {\n var ruleSortedKeys = this.ruleSortedKeys;\n var rules = this.rules;\n var mergedSegmentationTypeValue = this.mergedSegmentationTypeValue;\n //artificial rule 0.2\n if (position === 0) {\n return breaksAtResult(true, '0.2');\n }\n if (position === input.length) {\n //rule 0.3\n return breaksAtResult(true, '0.3');\n }\n //artificial rule 0.1: js specific, due to es5 regex not being unicode aware\n //number 0.1 chosen to mimic java implementation, but needs to execute after 0.2 and 0.3 to be inside the string bounds\n if ((0, segmentation_utils_1.isSurrogate)(input, position)) {\n return breaksAtResult(false, '0.1');\n }\n var stringBeforeBreak = input.substring(0, position);\n var stringAfterBreak = input.substring(position);\n //artificial rule 0.4: handle suppressions\n if ('suppressions' in mergedSegmentationTypeValue) {\n for (var _i = 0, _a = mergedSegmentationTypeValue.suppressions; _i < _a.length; _i++) {\n var suppressions = _a[_i];\n if (stringBeforeBreak.trim().endsWith(suppressions)) {\n return breaksAtResult(false, '0.4');\n }\n }\n }\n // loop through rules and find a match\n for (var _b = 0, ruleSortedKeys_1 = ruleSortedKeys; _b < ruleSortedKeys_1.length; _b++) {\n var ruleKey = ruleSortedKeys_1[_b];\n var _c = rules[ruleKey], before = _c.before, after = _c.after, breaks = _c.breaks;\n // for debugging\n // if (ruleKey === '16' && position === 4) {\n // console.log({before, after, stringBeforeBreak, stringAfterBreak})\n // }\n if (before) {\n if (!before.test(stringBeforeBreak)) {\n //didn't match the before part, therfore skipping\n continue;\n }\n }\n if (after) {\n if (!after.test(stringAfterBreak)) {\n //didn't match the after part, therfore skipping\n continue;\n }\n }\n return breaksAtResult(breaks, ruleKey);\n }\n //artificial rule 999: if no rule matched is Any ÷ Any so return true\n return breaksAtResult(true, '999');\n };\n Segmenter.prototype.segment = function (input) {\n checkReceiver(this, 'segment');\n return new SegmentIterator(this, input);\n };\n Segmenter.prototype.resolvedOptions = function () {\n checkReceiver(this, 'resolvedOptions');\n return tslib_1.__assign({}, (0, ecma402_abstract_1.getMultiInternalSlots)(__INTERNAL_SLOT_MAP__, this, 'locale', 'granularity'));\n };\n Segmenter.supportedLocalesOf = function (locales, options) {\n return (0, ecma402_abstract_1.SupportedLocales)(Segmenter.availableLocales, (0, ecma402_abstract_1.CanonicalizeLocaleList)(locales), options);\n };\n Segmenter.availableLocales = new Set(Object.keys(cldr_segmentation_rules_generated_1.SegmentationRules).filter(function (key) { return key !== 'root'; }));\n Segmenter.polyfilled = true;\n return Segmenter;\n}());\nexports.Segmenter = Segmenter;\nvar createSegmentDataObject = function (segmenter, segment, index, input, matchingRule) {\n var returnValue = {\n segment: segment,\n index: index,\n input: input,\n };\n if (getSlot(segmenter, 'granularity') === 'word') {\n returnValue.isWordLike = matchingRule !== '3.1' && matchingRule !== '3.2';\n }\n return returnValue;\n};\nvar SegmentIterator = /** @class */ (function () {\n function SegmentIterator(segmenter, input) {\n this.segmenter = segmenter;\n this.lastSegmentIndex = 0;\n if (typeof input == 'symbol') {\n throw TypeError(\"Input must not be a symbol\");\n }\n this.input = String(input);\n }\n SegmentIterator.prototype[Symbol.iterator] = function () {\n return new SegmentIterator(this.segmenter, this.input);\n };\n SegmentIterator.prototype.next = function () {\n //using only the relevant bit of the string\n var checkString = this.input.substring(this.lastSegmentIndex);\n //loop from the start of the checkString, until exactly length (breaksAt returns break at pos=== lenght)\n for (var position = 1; position <= checkString.length; position++) {\n var _a = this.segmenter.breaksAt(position, checkString), breaks = _a.breaks, matchingRule = _a.matchingRule;\n if (breaks) {\n var segment = checkString.substring(0, position);\n var index = this.lastSegmentIndex;\n this.lastSegmentIndex += position;\n return {\n done: false,\n value: createSegmentDataObject(this.segmenter, segment, index, this.input, matchingRule),\n };\n }\n }\n //no segment was found by the loop, therefore the segmentation is done\n return { done: true, value: undefined };\n };\n SegmentIterator.prototype.containing = function (positionInput) {\n if (typeof positionInput === 'bigint') {\n throw TypeError('Index must not be a BigInt');\n }\n var position = Number(positionInput);\n //https://tc39.es/ecma262/#sec-tointegerorinfinity\n // 2. If number is NaN, +0𝔽, or -0𝔽, return 0.\n if (isNaN(position) || !position) {\n position = 0;\n }\n // 5. Let integer be floor(abs(ℝ(number))).\n // 6. If number < -0𝔽, set integer to -integer.\n position = Math.floor(Math.abs(position)) * (position < 0 ? -1 : 1);\n if (position < 0 || position >= this.input.length) {\n return undefined;\n }\n //find previous break point\n var previousBreakPoint = 0;\n if (position === 0) {\n previousBreakPoint = 0;\n }\n else {\n var checkString_1 = this.input;\n for (var cursor = position; cursor >= 0; cursor--) {\n var breaks = this.segmenter.breaksAt(cursor, checkString_1).breaks;\n if (breaks) {\n previousBreakPoint = cursor;\n break;\n }\n }\n }\n var checkString = this.input.substring(previousBreakPoint);\n //find next break point\n for (var cursor = 1; cursor <= checkString.length; cursor++) {\n var _a = this.segmenter.breaksAt(cursor, checkString), breaks = _a.breaks, matchingRule = _a.matchingRule;\n if (breaks) {\n var segment = checkString.substring(0, cursor);\n return createSegmentDataObject(this.segmenter, segment, previousBreakPoint, this.input, matchingRule);\n }\n }\n };\n return SegmentIterator;\n}());\nvar __INTERNAL_SLOT_MAP__ = new WeakMap();\nfunction getSlot(instance, key) {\n return (0, ecma402_abstract_1.getInternalSlot)(__INTERNAL_SLOT_MAP__, instance, key);\n}\nfunction setSlot(instance, key, value) {\n (0, ecma402_abstract_1.setInternalSlot)(__INTERNAL_SLOT_MAP__, instance, key, value);\n}\nfunction checkReceiver(receiver, methodName) {\n if (!(receiver instanceof Segmenter)) {\n throw TypeError(\"Method Intl.Segmenter.prototype.\".concat(methodName, \" called on incompatible receiver\"));\n }\n}\ntry {\n // IE11 does not have Symbol\n if (typeof Symbol !== 'undefined') {\n Object.defineProperty(Segmenter.prototype, Symbol.toStringTag, {\n value: 'Intl.Segmenter',\n writable: false,\n enumerable: false,\n configurable: true,\n });\n }\n //github.com/tc39/test262/blob/main/test/intl402/Segmenter/constructor/length.js\n https: Object.defineProperty(Segmenter.prototype.constructor, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n // https://github.com/tc39/test262/blob/main/test/intl402/Segmenter/constructor/supportedLocalesOf/length.js\n Object.defineProperty(Segmenter.supportedLocalesOf, 'length', {\n value: 1,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n}\ncatch (e) {\n // Meta fix so we're test262-compliant, not important\n}\n","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the element from the end of the buffer.\n * @memberof Tinode.CBuffer#\n * @param {number} at - position to fetch from, counting from the end;\n * undefined or null mean \"last\".\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(at) {\n at |= 0;\n return this.buffer.length > at ? this.buffer[this.buffer.length - 1 - at] : undefined;\n }\n\n /**\n * Add new element(s) to the buffer. Variadic: takes one or more arguments. If an array is passed as a single\n * argument, its elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive).\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive).\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = startIdx | 0;\n beforeIdx = beforeIdx || this.buffer.length;\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2023 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.21';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Settings for exponential backoff\nconst _BOFF_BASE = 2000; // 2000 milliseconds, minimum delay between reconnects\nconst _BOFF_MAX_ITER = 10; // Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes\nconst _BOFF_JITTER = 0.3; // Add random delay\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = _BOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _BOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= _BOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) { // 1 == OPENED\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 1;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n // Object store (table) for topics. The primary key is topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n };\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = (event) => {\n resolve(event.target.result);\n };\n trx.onerror = (event) => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {Object} query - parameters of the message range to retrieve.\n * @param {number=} query.since - the least message ID to retrieve (inclusive).\n * @param {number=} query.before - the greatest message ID to retrieve (exclusive).\n * @param {number=} query.limit - the maximum number of messages to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n query = query || {};\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n const result = [];\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n const trx = this.db.transaction(['message']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev').onsuccess = (event) => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'read', 'recv', 'seq', 'clear', 'defacs',\n 'creds', 'public', 'trusted', 'private', 'touched', '_deleted'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @copyright 2015-2022 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n *

Supports conversion of user keyboard input to formatted text:

\n *
    \n *
  • *abc* → abc
  • \n *
  • _abc_ → abc
  • \n *
  • ~abc~ → abc
  • \n *
  • `abc` → abc
  • \n *
\n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n *
\n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * 
\n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst JSON_MIME_TYPE = 'application/json';\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
',\n close: _ => '
'\n },\n // Row: logic grouping of elements\n RW: {\n open: _ => '
',\n close: _ => '
'\n },\n // Quoted block.\n QQ: {\n open: _ => '
',\n close: _ => '
',\n props: (data) => {\n return data ? {} : null;\n },\n },\n // Video call\n VC: {\n open: _ => '
',\n close: _ => '
',\n props: data => {\n if (!data) return {};\n return {\n 'data-duration': data.duration,\n 'data-state': data.state,\n };\n }\n },\n // Video.\n VD: {\n open: data => {\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return '';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n getCorrectLengthsWhenTreatedAsGrapheme(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = getGraphemesFromString(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n getCorrectLengthsWhenTreatedAsGrapheme(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n getCorrectLengthsWhenTreatedAsGrapheme(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = getGraphemesFromString(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: getGraphemesFromString(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: getGraphemesFromString(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: JSON_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: getGraphemesFromString(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup.\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (entData.mime != JSON_MIME_TYPE && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > getGraphemesFromString(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = getGraphemesFromString(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = getGraphemesFromString(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = getGraphemesFromString(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = getGraphemesFromString(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (c.data['mime'] == JSON_MIME_TYPE) {\n // JSON attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array(len equal to og string) such that each index \n// denotes the position of char in string in a grapheme array(created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction getGraphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster\n charIndex += segment.length;\n\n // Increment the grapheme index\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Returns correct offset and length, given the wrong offset, graphemes and og string \nfunction getCorrectLengthsWhenTreatedAsGrapheme(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = getGraphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen =\n fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt :\n fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Returns graphme cluster array from string\nfunction getGraphemesFromString(input) {\n return Array.from(segmenter.segment(input));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n mergeObj,\n mergeToCache,\n normalizeArray\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacls.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {boolean} forward if true, request newer messages.\n */\n getMessagesPage(limit, forward) {\n let query = forward ?\n this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then((count) => {\n if (count == limit) {\n // Got enough messages from local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = forward ? this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n let promise = this.getMeta(query.build());\n if (!forward) {\n promise = promise.then(ctrl => {\n if (ctrl && ctrl.params && !ctrl.params.count) {\n this._noEarlierMsgs = true;\n }\n });\n }\n return promise;\n });\n }\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subsriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Delete messages. Hard-deleting messages requires Owner permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.DelRange[]} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n // Sort ranges in accending order by low, the descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return true;\n }\n if (r1.low == r2.low) {\n return !r2.hi || (r1.hi >= r2.hi);\n }\n return false;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n let tosend = ranges.reduce((out, r) => {\n if (r.low < Const.LOCAL_SEQID) {\n if (!r.hi || r.hi < Const.LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: this._maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = ctrl.params.del;\n }\n\n ranges.forEach((r) => {\n if (r.hi) {\n this.flushMessageRange(r.low, r.hi);\n } else {\n this.flushMessage(r.low);\n }\n });\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} list - list of seq IDs to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesList(list, hardDel) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n let ranges = list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n // Send {del} message, return promise\n return this.delMessages(ranges, hardDel);\n }\n\n /**\n * Delete original message and edited variants. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delMessagesEdits(seq, hardDel) {\n const list = [seq];\n this.messageVersions(seq, msg => list.push(msg.seq));\n // Send {del} message, return promise\n return this.delMessagesList(list, hardDel);\n }\n\n /**\n * Delete topic. Requires Owner permission. Wrapper for {@link Tinode#delTopic}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hard - had-delete topic.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delTopic(hard) {\n if (this._deleted) {\n // The topic is already deleted at the server, just remove from DB.\n this._gone();\n return Promise.resolve(null);\n }\n\n return this._tinode.delTopic(this.name, hard).then(ctrl => {\n this._deleted = true;\n this._resetSub();\n this._gone();\n return ctrl;\n });\n }\n /**\n * Delete subscription. Requires Share permission. Wrapper for {@link Tinode#delSubscription}.\n * @memberof Tinode.Topic#\n *\n * @param {string} user - ID of the user to remove subscription for.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delSubscription(user) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delSubscription(this.name, user).then(ctrl => {\n // Remove the object from the subscription cache;\n delete this._users[user];\n // Notify listeners\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n return ctrl;\n });\n }\n /**\n * Send a read/recv notification.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what notification to send: recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.} a copy of tags\n */\n tags() {\n // Return a copy.\n return this._tags.slice(0);\n }\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (this._isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by seq.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent message from cache. This method counts all messages, including deleted ranges.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast();\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} newer - if true, check for newer messages only.\n */\n msgHasMoreMessages(newer) {\n return newer ? this.seq > this._maxSeq :\n // _minSeq could be more than 1, but earlier messages could have been deleted.\n (this._minSeq > 1 && !this._noEarlierMsgs);\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n _isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!this._isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n data.content = Drafty.updateVideoCall(data.content, {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n });\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived or in response to received\n // {ctrl} after setMeta-sub.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags.length == 1 && tags[0] == Const.DEL_CHAR) {\n tags = [];\n }\n this._tags = tags;\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n const topic = this;\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(function(range) {\n if (!range.hi) {\n count++;\n topic.flushMessage(range.low);\n } else {\n for (let i = range.low; i < range.hi; i++) {\n count++;\n topic.flushMessage(i);\n }\n }\n });\n }\n\n if (count > 0) {\n // this._updateDeletedRanges();\n\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, params) {\n const {\n since,\n before,\n limit\n } = params || {};\n return db.readMessages(this.name, {\n since: since,\n before: before,\n limit: limit || Const.DEFAULT_MESSAGES_PAGE\n })\n .then(msgs => {\n msgs.forEach((data) => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n return msgs.length;\n });\n }\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n}\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Ignore properties where ignore[property] is true.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src, ignore) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return src;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (!ignore || !ignore[prop]) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n // FIXME: probably need to log something here.\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval, ignore) {\n cache[key] = mergeObj(cache[key], newval, ignore);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, strip empty and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out.sort().filter(function(item, pos, ary) {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n","export const PACKAGE_VERSION = \"0.22.12\";\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2022 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.20\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport '@formatjs/intl-segmenter/polyfill'\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n Topic,\n TopicMe,\n TopicFnd\n} from './topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format /\n this._appName = config.appName || \"Undefined\";\n\n // API Key.\n this._apiKey = config.apiKey;\n\n // Name and version of the browser.\n this._platform = config.platform || 'web';\n // Underlying OS.\n if (typeof navigator != 'undefined') {\n this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n this._hwos = navigator.platform;\n // This is the default language. It could be changed by client.\n this._humanLanguage = navigator.language || 'en-US';\n }\n\n Connection.logger = this.logger;\n Drafty.logger = this.logger;\n\n // WebSocket or long polling network connection.\n if (config.transport != 'lp' && config.transport != 'ws') {\n config.transport = detectTransport();\n }\n this._connection = new Connection(config, Const.PROTOCOL_VERSION, /* autoreconnect */ true);\n this._connection.onMessage = (data) => {\n // Call the main message dispatcher.\n this.#dispatchMessage(data);\n }\n\n // Ready to start sending.\n this._connection.onOpen = _ => this.#connectionOpen();\n this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n\n // Wrapper for the reconnect iterator callback.\n this._connection.onAutoreconnectIteration = (timeout, promise) => {\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout, promise);\n }\n }\n\n this._persist = config.persist;\n // Initialize object regardless. It simplifies the code.\n this._db = new DBCache(err => {\n this.logger('DB', err);\n }, this.logger);\n\n if (this._persist) {\n // Create the persistent cache.\n // Store promises to be resolved when messages load into memory.\n const prom = [];\n this._db.initDatabase().then(_ => {\n // First load topics into memory.\n return this._db.mapTopics((data) => {\n let topic = this.#cacheGet('topic', data.name);\n if (topic) {\n return;\n }\n if (data.name == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (data.name == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(data.name);\n }\n this._db.deserializeTopic(topic, data);\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Topic loaded from DB is not new.\n delete topic._new;\n // Request to load messages and save the promise.\n prom.push(topic._loadMessages(this._db));\n });\n }).then(_ => {\n // Then load users.\n return this._db.mapUsers((data) => {\n this.#cachePut('user', data.uid, mergeObj({}, data.public));\n });\n }).then(_ => {\n // Now wait for all messages to finish loading.\n return Promise.all(prom);\n }).then(_ => {\n if (onComplete) {\n onComplete();\n }\n this.logger(\"Persistent cache initialized.\");\n }).catch(err => {\n if (onComplete) {\n onComplete(err);\n }\n this.logger(\"Failed to initialize persistent cache:\", err);\n });\n } else {\n this._db.deleteDatabase().then(_ => {\n if (onComplete) {\n onComplete();\n }\n });\n }\n }\n\n // Private methods.\n\n // Console logger. Babel somehow fails to parse '...rest' parameter.\n logger(str, ...args) {\n if (this._loggingEnabled) {\n const d = new Date();\n const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' +\n ('0' + d.getUTCMinutes()).slice(-2) + ':' +\n ('0' + d.getUTCSeconds()).slice(-2) + '.' +\n ('00' + d.getUTCMilliseconds()).slice(-3);\n\n console.log('[' + dateString + ']', str, args.join(' '));\n }\n }\n\n // Generator of default promises for sent packets.\n #makePromise(id) {\n let promise = null;\n if (id) {\n promise = new Promise((resolve, reject) => {\n // Stored callbacks will be called when the response packet with this Id arrives\n this._pendingPromises[id] = {\n 'resolve': resolve,\n 'reject': reject,\n 'ts': new Date()\n };\n });\n }\n return promise;\n };\n\n // Resolve or reject a pending promise.\n // Unresolved promises are stored in _pendingPromises.\n #execPromise(id, code, onOK, errorText) {\n const callbacks = this._pendingPromises[id];\n if (callbacks) {\n delete this._pendingPromises[id];\n if (code >= 200 && code < 400) {\n if (callbacks.resolve) {\n callbacks.resolve(onOK);\n }\n } else if (callbacks.reject) {\n callbacks.reject(new CommError(errorText, code));\n }\n }\n }\n\n // Send a packet. If packet id is provided return a promise.\n #send(pkt, id) {\n let promise;\n if (id) {\n promise = this.#makePromise(id);\n }\n pkt = simplify(pkt);\n let msg = JSON.stringify(pkt);\n this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n try {\n this._connection.sendText(msg);\n } catch (err) {\n // If sendText throws, wrap the error in a promise or rethrow.\n if (id) {\n this.#execPromise(id, Connection.NETWORK_ERROR, null, err.message);\n } else {\n throw err;\n }\n }\n return promise;\n }\n\n // The main message dispatcher.\n #dispatchMessage(data) {\n // Skip empty response. This happens when LP times out.\n if (!data)\n return;\n\n this._inPacketCount++;\n\n // Send raw message to listener\n if (this.onRawMessage) {\n this.onRawMessage(data);\n }\n\n if (data === '0') {\n // Server response to a network probe.\n if (this.onNetworkProbe) {\n this.onNetworkProbe();\n }\n // No processing is necessary.\n return;\n }\n\n let pkt = JSON.parse(data, jsonParseHelper);\n if (!pkt) {\n this.logger(\"in: \" + data);\n this.logger(\"ERROR: failed to parse data\");\n } else {\n this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n\n // Send complete packet to listener\n if (this.onMessage) {\n this.onMessage(pkt);\n }\n\n if (pkt.ctrl) {\n // Handling {ctrl} message\n if (this.onCtrlMessage) {\n this.onCtrlMessage(pkt.ctrl);\n }\n\n // Resolve or reject a pending promise, if any\n if (pkt.ctrl.id) {\n this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n }\n setTimeout(_ => {\n if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n // User evicted from topic.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._resetSub();\n if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n topic._gone();\n }\n }\n } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n if (pkt.ctrl.params.what == 'data') {\n // code=208, all messages received: \"params\":{\"count\":11,\"what\":\"data\"},\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._allMessagesReceived(pkt.ctrl.params.count);\n }\n } else if (pkt.ctrl.params.what == 'sub') {\n // code=204, the topic has no (refreshed) subscriptions.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n // Trigger topic.onSubsUpdated.\n topic._processMetaSubs([]);\n }\n }\n }\n }, 0);\n } else {\n setTimeout(_ => {\n if (pkt.meta) {\n // Handling a {meta} message.\n // Preferred API: Route meta to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.meta.topic);\n if (topic) {\n topic._routeMeta(pkt.meta);\n }\n\n if (pkt.meta.id) {\n this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n }\n\n // Secondary API: callback\n if (this.onMetaMessage) {\n this.onMetaMessage(pkt.meta);\n }\n } else if (pkt.data) {\n // Handling {data} message\n // Preferred API: Route data to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.data.topic);\n if (topic) {\n topic._routeData(pkt.data);\n }\n\n // Secondary API: Call callback\n if (this.onDataMessage) {\n this.onDataMessage(pkt.data);\n }\n } else if (pkt.pres) {\n // Handling {pres} message\n // Preferred API: Route presence to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.pres.topic);\n if (topic) {\n topic._routePres(pkt.pres);\n }\n\n // Secondary API - callback\n if (this.onPresMessage) {\n this.onPresMessage(pkt.pres);\n }\n } else if (pkt.info) {\n // {info} message - read/received notifications and key presses\n // Preferred API: Route {info}} to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.info.topic);\n if (topic) {\n topic._routeInfo(pkt.info);\n }\n\n // Secondary API - callback\n if (this.onInfoMessage) {\n this.onInfoMessage(pkt.info);\n }\n } else {\n this.logger(\"ERROR: Unknown packet received.\");\n }\n }, 0);\n }\n }\n }\n\n // Connection open, ready to start sending.\n #connectionOpen() {\n if (!this._expirePromises) {\n // Reject promises which have not been resolved for too long.\n this._expirePromises = setInterval(_ => {\n const err = new CommError(\"timeout\", 504);\n const expires = new Date(new Date().getTime() - Const.EXPIRE_PROMISES_TIMEOUT);\n for (let id in this._pendingPromises) {\n let callbacks = this._pendingPromises[id];\n if (callbacks && callbacks.ts < expires) {\n this.logger(\"Promise expired\", id);\n delete this._pendingPromises[id];\n if (callbacks.reject) {\n callbacks.reject(err);\n }\n }\n }\n }, Const.EXPIRE_PROMISES_PERIOD);\n }\n this.hello();\n }\n\n #disconnected(err, code) {\n this._inPacketCount = 0;\n this._serverInfo = null;\n this._authenticated = false;\n\n if (this._expirePromises) {\n clearInterval(this._expirePromises);\n this._expirePromises = null;\n }\n\n // Mark all topics as unsubscribed\n this.#cacheMap('topic', (topic, key) => {\n topic._resetSub();\n });\n\n // Reject all pending promises\n for (let key in this._pendingPromises) {\n const callbacks = this._pendingPromises[key];\n if (callbacks && callbacks.reject) {\n callbacks.reject(err);\n }\n }\n this._pendingPromises = {};\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n }\n\n // Get User Agent string\n #getUserAgent() {\n return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + Const.LIBRARY;\n }\n\n // Generator of packets stubs\n #initPacket(type, topic) {\n switch (type) {\n case 'hi':\n return {\n 'hi': {\n 'id': this.getNextUniqueId(),\n 'ver': Const.VERSION,\n 'ua': this.#getUserAgent(),\n 'dev': this._deviceToken,\n 'lang': this._humanLanguage,\n 'platf': this._platform\n }\n };\n\n case 'acc':\n return {\n 'acc': {\n 'id': this.getNextUniqueId(),\n 'user': null,\n 'scheme': null,\n 'secret': null,\n 'tmpscheme': null,\n 'tmpsecret': null,\n 'login': false,\n 'tags': null,\n 'desc': {},\n 'cred': {}\n }\n };\n\n case 'login':\n return {\n 'login': {\n 'id': this.getNextUniqueId(),\n 'scheme': null,\n 'secret': null\n }\n };\n\n case 'sub':\n return {\n 'sub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'set': {},\n 'get': {}\n }\n };\n\n case 'leave':\n return {\n 'leave': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'unsub': false\n }\n };\n\n case 'pub':\n return {\n 'pub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'noecho': false,\n 'head': null,\n 'content': {}\n }\n };\n\n case 'get':\n return {\n 'get': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'desc': {},\n 'sub': {},\n 'data': {}\n }\n };\n\n case 'set':\n return {\n 'set': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'desc': {},\n 'sub': {},\n 'tags': [],\n 'ephemeral': {}\n }\n };\n\n case 'del':\n return {\n 'del': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'delseq': null,\n 'user': null,\n 'hard': false\n }\n };\n\n case 'note':\n return {\n 'note': {\n // no id by design (except calls).\n 'topic': topic,\n 'what': null, // one of \"recv\", \"read\", \"kp\", \"call\"\n 'seq': undefined // the server-side message id acknowledged as received or read.\n }\n };\n\n default:\n throw new Error(`Unknown packet type requested: ${type}`);\n }\n }\n\n // Cache management\n #cachePut(type, name, obj) {\n this._cache[type + ':' + name] = obj;\n }\n #cacheGet(type, name) {\n return this._cache[type + ':' + name];\n }\n #cacheDel(type, name) {\n delete this._cache[type + ':' + name];\n }\n\n // Enumerate all items in cache, call func for each item.\n // Enumeration stops if func returns true.\n #cacheMap(type, func, context) {\n const key = type ? type + ':' : undefined;\n for (let idx in this._cache) {\n if (!key || idx.indexOf(key) == 0) {\n if (func.call(context, this._cache[idx], idx)) {\n break;\n }\n }\n }\n }\n\n // Make limited cache management available to topic.\n // Caching user.public only. Everything else is per-topic.\n #attachCacheToTopic(topic) {\n topic._tinode = this;\n\n topic._cacheGetUser = (uid) => {\n const pub = this.#cacheGet('user', uid);\n if (pub) {\n return {\n user: uid,\n public: mergeObj({}, pub)\n };\n }\n return undefined;\n };\n topic._cachePutUser = (uid, user) => {\n this.#cachePut('user', uid, mergeObj({}, user.public));\n };\n topic._cacheDelUser = (uid) => {\n this.#cacheDel('user', uid);\n };\n topic._cachePutSelf = _ => {\n this.#cachePut('topic', topic.name, topic);\n };\n topic._cacheDelSelf = _ => {\n this.#cacheDel('topic', topic.name);\n };\n }\n\n // On successful login save server-provided data.\n #loginSuccessful(ctrl) {\n if (!ctrl.params || !ctrl.params.user) {\n return ctrl;\n }\n // This is a response to a successful login,\n // extract UID and security token, save it in Tinode module\n this._myUID = ctrl.params.user;\n this._authenticated = (ctrl && ctrl.code >= 200 && ctrl.code < 300);\n if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n this._authToken = {\n token: ctrl.params.token,\n expires: ctrl.params.expires\n };\n } else {\n this._authToken = null;\n }\n\n if (this.onLogin) {\n this.onLogin(ctrl.code, ctrl.text);\n }\n\n return ctrl;\n }\n\n // Static methods.\n /**\n * Helper method to package account credential.\n *\n * @param {string | Credential} meth - validation method or object with validation data.\n * @param {string=} val - validation value (e.g. email or phone number).\n * @param {Object=} params - validation parameters.\n * @param {string=} resp - validation response.\n *\n * @returns {Array.} array with a single credential or null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.} tags - array of string tags for user discovery.\n * @property {string} scheme - Temporary authentication scheme for password reset.\n * @property {string} secret - Temporary authentication secret for password reset.\n * @property {Array.=} attachments - Array of references to out of band attachments used in account description.\n */\n /**\n * @typedef DefAcs\n * @type {Object}\n * @property {string=} auth - Access mode for me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.=} attachments - URLs of out of band attachments used in parameters.\n */\n /**\n * @typedef SetDesc\n * @type {Object}\n * @property {DefAcs=} defacs - Default access mode.\n * @property {Object=} public - Free-form topic description, publically accessible.\n * @property {Object=} private - Free-form topic description accessible only to the owner.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n */\n /**\n * @typedef SetSub\n * @type {Object}\n * @property {string=} user - UID of the user affected by the request. Default (empty) - current user.\n * @property {string=} mode - User access mode, either requested or assigned dependent on context.\n */\n /**\n * Send a topic subscription request.\n *\n * @param {string} topic - Name of the topic to subscribe to.\n * @param {GetQuery=} getParams - Optional subscription metadata query\n * @param {SetParams=} setParams - Optional initialization parameters\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n subscribe(topicName, getParams, setParams) {\n const pkt = this.#initPacket('sub', topicName)\n if (!topicName) {\n topicName = Const.TOPIC_NEW;\n }\n\n pkt.sub.get = getParams;\n\n if (setParams) {\n if (setParams.sub) {\n pkt.sub.set.sub = setParams.sub;\n }\n\n if (setParams.desc) {\n const desc = setParams.desc;\n if (Tinode.isNewGroupTopicName(topicName)) {\n // Full set.desc params are used for new topics only\n pkt.sub.set.desc = desc;\n } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n // Use optional default permissions only.\n pkt.sub.set.desc = {\n defacs: desc.defacs\n };\n }\n }\n\n // See if external objects were used in topic description.\n if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n pkt.extra = {\n attachments: setParams.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n\n if (setParams.tags) {\n pkt.sub.set.tags = setParams.tags;\n }\n }\n return this.#send(pkt, pkt.sub.id);\n }\n\n /**\n * Detach and optionally unsubscribe from the topic\n *\n * @param {string} topic - Topic to detach from.\n * @param {boolean} unsub - If true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.=} attachments - array of URLs with attachments.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publishMessage(pub, attachments) {\n // Make a shallow copy. Needed in order to clear locally-assigned temp values;\n pub = Object.assign({}, pub);\n pub.seq = undefined;\n pub.from = undefined;\n pub.ts = undefined;\n const msg = {\n pub: pub,\n };\n if (attachments) {\n msg.extra = {\n attachments: attachments.filter(ref => isUrlRelative(ref))\n };\n }\n return this.#send(msg, pub.id);\n }\n\n /**\n * Out of band notification: notify topic that an external (push) notification was recived by the client.\n *\n * @param {object} data - notification payload.\n * @param {string} data.what - notification type, 'msg', 'read', 'sub'.\n * @param {string} data.topic - name of the updated topic.\n * @param {number=} data.seq - seq ID of the affected message.\n * @param {string=} data.xfrom - UID of the sender.\n * @param {object=} data.given - new subscription 'given', e.g. 'ASWP...'.\n * @param {object=} data.want - new subscription 'want', e.g. 'RWJ...'.\n */\n oobNotification(data) {\n this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n\n switch (data.what) {\n case 'msg':\n if (!data.seq || data.seq < 1 || !data.topic) {\n // Server sent invalid data.\n break;\n }\n\n if (!this.isConnected()) {\n // Let's ignore the message if there is no connection: no connection means there are no open\n // tabs with Tinode.\n break;\n }\n\n const topic = this.#cacheGet('topic', data.topic);\n if (!topic) {\n // TODO: check if there is a case when a message can arrive from an unknown topic.\n break;\n }\n\n if (topic.isSubscribed()) {\n // No need to fetch: topic is already subscribed and got data through normal channel.\n break;\n }\n\n if (topic.maxMsgSeq() < data.seq) {\n if (topic.isChannelType()) {\n topic._updateReceived(data.seq, 'fake-uid');\n }\n\n // New message.\n if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n // Message from unknown sender, fetch description from the server.\n // Sending asynchronously without a subscription.\n this.getMeta(data.xfrom, new MetaGetBuilder().withDesc().build()).catch(err => {\n this.logger(\"Failed to get the name of a new sender\", err);\n });\n }\n\n topic.subscribe(null).then(_ => {\n return topic.getMeta(new MetaGetBuilder(topic).withLaterData(24).withLaterDel(24).build());\n }).then(_ => {\n // Allow data fetch to complete and get processed successfully.\n topic.leaveDelayed(false, 1000);\n }).catch(err => {\n this.logger(\"On push data fetch failed\", err);\n }).finally(_ => {\n this.getMeTopic()._refreshContact('msg', topic);\n });\n }\n break;\n\n case 'read':\n this.getMeTopic()._routePres({\n what: 'read',\n seq: data.seq\n });\n break;\n\n case 'sub':\n if (!this.isMe(data.xfrom)) {\n // TODO: handle updates from other users.\n break;\n }\n\n const mode = {\n given: data.modeGiven,\n want: data.modeWant\n };\n const acs = new AccessMode(mode);\n const pres = (!acs.mode || acs.mode == AccessMode._NONE) ?\n // Subscription deleted.\n {\n what: 'gone',\n src: data.topic\n } :\n // New subscription or subscription updated.\n {\n what: 'acs',\n src: data.topic,\n dacs: mode\n };\n this.getMeTopic()._routePres(pres);\n break;\n\n default:\n this.logger(\"Unknown push type ignored\", data.what);\n }\n }\n\n /**\n * @typedef GetQuery\n * @type {Object}\n * @property {GetOptsType=} desc - If provided (even if empty), fetch topic description.\n * @property {GetOptsType=} sub - If provided (even if empty), fetch topic subscriptions.\n * @property {GetDataType=} data - If provided (even if empty), get messages.\n */\n\n /**\n * @typedef GetOptsType\n * @type {Object}\n * @property {Date=} ims - \"If modified since\", fetch data only it was was modified since stated date.\n * @property {number=} limit - Maximum number of results to return. Ignored when querying topic description.\n */\n\n /**\n * @typedef GetDataType\n * @type {Object}\n * @property {number=} since - Load messages with seq id equal or greater than this value.\n * @property {number=} before - Load messages with seq id lower than this number.\n * @property {number=} limit - Maximum number of results to return.\n */\n\n /**\n * Request topic metadata\n *\n * @param {string} topic - Name of the topic to query.\n * @param {GetQuery} params - Parameters of the query. Use {@link Tinode.MetaGetBuilder} to generate.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n getMeta(topic, params) {\n const pkt = this.#initPacket('get', topic);\n\n pkt.get = mergeObj(pkt.get, params);\n\n return this.#send(pkt, pkt.get.id);\n }\n\n /**\n * Update topic's metadata: description, subscribtions.\n *\n * @param {string} topic - Topic to update.\n * @param {SetParams} params - topic metadata to update.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n setMeta(topic, params) {\n const pkt = this.#initPacket('set', topic);\n const what = [];\n\n if (params) {\n ['desc', 'sub', 'tags', 'cred', 'ephemeral'].forEach(function(key) {\n if (params.hasOwnProperty(key)) {\n what.push(key);\n pkt.set[key] = params[key];\n }\n });\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n if (what.length == 0) {\n return Promise.reject(new Error(\"Invalid {set} parameters\"));\n }\n\n return this.#send(pkt, pkt.set.id);\n }\n\n /**\n * Range of message IDs to delete.\n *\n * @typedef DelRange\n * @type {Object}\n * @property {number} low - low end of the range, inclusive (closed).\n * @property {number=} hi - high end of the range, exclusive (open).\n */\n /**\n * Delete some or all messages in a topic.\n *\n * @param {string} topic - Topic name to delete messages from.\n * @param {DelRange[]} list - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delMessages(topic, ranges, hard) {\n const pkt = this.#initPacket('del', topic);\n\n pkt.del.what = 'msg';\n pkt.del.delseq = ranges;\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete the topic alltogether. Requires Owner permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delTopic(topicName, hard) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'topic';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete subscription. Requires Share permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delSubscription(topicName, user) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'sub';\n pkt.del.user = user;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete credential. Always sent on 'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n"],"names":["AccessMode","constructor","acs","given","decode","want","mode","checkFlag","#checkFlag","val","side","flag","includes","Error","str","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","i","length","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","split","diff","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","g","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","CBuffer","comparator","undefined","unique","buffer","compare_","unique_","a","b","findNearest","#findNearest","elem","arr","exact","start","end","pivot","found","idx","insertSorted","#insertSorted","count","splice","getAt","at","getLast","put","insert","arguments","Array","isArray","delAt","r","delRange","since","before","reset","forEach","callback","startIdx","beforeIdx","context","call","find","nearest","filter","isEmpty","CommError","message","code","name","PACKAGE_VERSION","PROTOCOL_VERSION","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_SYS","TOPIC_CHAN","TOPIC_GRP","TOPIC_P2P","USER_NEW","LOCAL_SEQID","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","EXPIRE_PROMISES_TIMEOUT","EXPIRE_PROMISES_PERIOD","RECV_TIMEOUT","DEFAULT_MESSAGES_PAGE","DEL_CHAR","jsonParseHelper","WebSocketProvider","XHRProvider","NETWORK_ERROR","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","_BOFF_BASE","_BOFF_MAX_ITER","_BOFF_JITTER","makeBaseUrl","host","protocol","version","apiKey","url","Connection","log","_","boffTimer","boffIteration","boffClosed","socket","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","init_lp","init_ws","setNetworkProviders","wsProvider","xhrProvider","logger","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","boffReset","boffReconnect","#boffReconnect","clearTimeout","timeout","Math","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","boffStop","#boffStop","#boffReset","#init_lp","XDR_UNSENT","XDR_OPENED","XDR_HEADERS_RECEIVED","XDR_LOADING","XDR_DONE","_lpURL","_poller","_sender","lp_sender","url_","sender","onreadystatechange","evt","readyState","status","open","lp_poller","resolve","poller","promiseCompleted","pkt","JSON","parse","responseText","ctrl","params","sid","send","onOpen","onMessage","onDisconnect","text","abort","err","#init_ws","OPEN","close","conn","onerror","onopen","onclose","onmessage","data","DB_VERSION","DB_NAME","IDBProvider","DB","onError","db","disabled","mapObjects","#mapObjects","source","trx","transaction","event","target","error","objectStore","getAll","onsuccess","result","topic","initDatabase","req","onupgradeneeded","createObjectStore","keyPath","deleteDatabase","onblocked","isReady","updTopic","oncomplete","get","serializeTopic","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","src","updUser","uid","pub","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","serializeSubscription","mapSubscriptions","addMessage","add","serializeMessage","updMessageStatus","seq","_status","remMessages","from","to","range","readMessages","query","limit","openCursor","cursor","value","push","continue","topic_fields","#deserializeTopic","f","hasOwnProperty","tags","_tags","setAccessMode","read","unread","max","#serializeTopic","dst","getAccessMode","#serializeSubscription","fields","#serializeMessage","setDatabaseProvider","idbProvider","MAX_FORM_ELEMENTS","MAX_PREVIEW_ATTACHMENTS","MAX_PREVIEW_DATA_SIZE","JSON_MIME_TYPE","DRAFTY_MIME_TYPE","ALLOWED_ENT_FIELDS","segmenter","Intl","Segmenter","INLINE_STYLES","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","test","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","bin","atob","buf","ArrayBuffer","Uint8Array","charCodeAt","URL","createObjectURL","Blob","type","base64toDataUrl","DECORATORS","props","href","id","act","ref","mime","Drafty","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","init","plainText","content","lines","entityMap","entityIndex","blx","line","spans","entities","tag","concat","spannify","block","sort","toSpanTree","chunks","chunkify","drafty","draftify","extractEntities","ranges","entity","index","tp","offset","len","key","segments","segment","ele","getCorrectLengthsWhenTreatedAsGrapheme","getGraphemesFromString","map","s","correctAt","correctLen","isEmptyObject","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","Object","assign","quote","header","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","indexOf","appendButton","attachJSON","UNSAFE_toHTML","doc","tree","draftyToTree","htmlFormatter","values","join","treeBottomUp","format","original","formatter","shorten","light","shortenTree","lightEntity","treeToDrafty","forwardedContent","rmMention","node","parent","treeTopDown","lTrim","replyContent","convMNnQQnBR","startsWith","children","attachmentsToEnd","forwarding","toPlainText","isPlainText","toMarkdown","mdFormatter","def","isValid","txt_type","hasAttachments","attachments","hasEntities","styles","sanitizeEntities","copyEntData","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","span","chunk","chld","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","last","graphemes","spansToTree","flatten","child","addNode","n","att","subspans","inner","keymap","c","keys","newKey","transformer","stack","pop","tail","shortener","allow","lightCopy","trimStart","shift","match","extracted","el","startAt","plain","entries","dc","obj","getGraphemeIndices","graphemeIndex","charIndex","indices","input","module","exports","isUrlRelative","addURLParam","relUrl","window","location","origin","searchParams","substring","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","e","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","MetaGetBuilder","what","get_desc_ims","#get_desc_ims","updated","get_subs_ims","#get_subs_ims","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withEarlierData","_minSeq","withDesc","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withOneSub","withLaterOneSub","withLaterSub","withTags","withCred","withDel","withLaterDel","_maxDel","extract","build","getOwnPropertyNames","Const","mergeObj","mergeToCache","normalizeArray","Topic","callbacks","created","touched","Date","private","trusted","_users","_queuedSeqId","_noEarlierMsgs","_recvNotificationTimer","_credentials","_messageVersions","_messages","_attached","_new","_delayedLeaveTimer","onData","onMeta","onPres","onInfo","onMetaDesc","onMetaSub","onSubsUpdated","onTagsUpdated","onCredsUpdated","onDeleteTopic","onAllMessagesReceived","topicType","types","isMeTopicName","isGroupTopicName","isP2PTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","isSubscribed","subscribe","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","desc","_noForwarding","_processMetaDesc","createMessage","noEcho","publish","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_db","_cancelled","_fatal","leave","unsub","_resetSub","_gone","leaveDelayed","delay","getMeta","getMessagesPage","forward","startMetaQuery","_loadMessages","promise","setMeta","_processMetaSubs","_processMetaTags","cred","_processMetaCreds","subscriber","am","invite","archive","arch","delMessages","hard","r1","r2","low","hi","tosend","reduce","out","del","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","list","prev","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","_refreshContact","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","recv","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","cb","origSeq","versions","messages","sinceId","beforeId","msgs","unused1","unused2","_isReplacementMsg","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","msgHasMoreMessages","newer","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isArchived","isMeType","isChannelType","isGroupType","isCommType","isMe","head","replace","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","_routeInfo","_routeMeta","meta","_processDelMessages","clear","delseq","_routePres","pres","online","isTopicCached","dacs","info","subs","_updateCachedUser","creds","_allMessagesReceived","cached","_cachePutUser","_updateReceived","TopicMe","onContactUpdate","turnOff","_myUID","cont","seen","when","updateCount","cacheRemTopic","getTopic","cr","findIndex","meth","done","resp","cacheGetTopic","tgt","ua","dummy","delCredential","method","contacts","getContact","getCredentials","TopicFnd","_contacts","indexBy","getPrototypeOf","prototype","date","isNaN","isValidDate","d","getTime","rfc3339DateString","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","ignore","prop","cache","newval","simplify","t","trim","toLowerCase","item","pos","ary","DBCache","WebSocket","XMLHttpRequest","IndexedDBProvider","indexedDB","initForNonBrowserApp","chars","btoa","global","output","charCode","bc","bs","String","fromCharCode","detectTransport","b64EncodeUnicode","encodeURIComponent","toSolidBytes","p1","jsonBuildHelper","jsonLoggerHelper","getBrowserInfo","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","userAgent","language","dispatchMessage","connectionOpen","disconnected","persist","cacheGet","attachCacheToTopic","cachePut","all","dateString","_len","args","_key","console","makePromise","#makePromise","execPromise","#execPromise","onOK","errorText","#send","stringify","#dispatchMessage","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","#connectionOpen","setInterval","expires","hello","#disconnected","clearInterval","cacheMap","getUserAgent","#getUserAgent","initPacket","#initPacket","#cachePut","#cacheGet","cacheDel","#cacheDel","#cacheMap","func","#attachCacheToTopic","_cacheDelUser","loginSuccessful","#loginSuccessful","onLogin","credential","getVersion","getLibrary","isNullValue","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","URI_TOPIC_ID_PREFIX"],"sourceRoot":""} \ No newline at end of file diff --git a/umd/tinode.prod.js b/umd/tinode.prod.js index b02efc1..a24e5df 100644 --- a/umd/tinode.prod.js +++ b/umd/tinode.prod.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.tinode=t():e.tinode=t()}(this,(()=>(()=>{"use strict";var e={672:e=>{const t=64,s="application/json",i=["act","height","duration","incoming","mime","name","premime","preref","preview","ref","size","state","url","val","width"],n=[{name:"ST",start:/(?:^|[\W_])(\*)[^\s*]/,end:/[^\s*](\*)(?=$|[\W_])/},{name:"EM",start:/(?:^|\W)(_)[^\s_]/,end:/[^\s_](_)(?=$|\W)/},{name:"DL",start:/(?:^|[\W_])(~)[^\s~]/,end:/[^\s~](~)(?=$|[\W_])/},{name:"CO",start:/(?:^|\W)(`)[^`]/,end:/[^`](`)(?=$|\W)/}],r=["QQ"],a=[{name:"LN",dataName:"url",pack:function(e){return/^[a-z]+:\/\//i.test(e)||(e="http://"+e),{url:e}},re:/(?:(?:https?|ftp):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/gi},{name:"MN",dataName:"val",pack:function(e){return{val:e.slice(1)}},re:/\B@([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu},{name:"HT",dataName:"val",pack:function(e){return{val:e.slice(1)}},re:/\B#([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu}],o={AU:{html_tag:"audio",md_tag:void 0,isVoid:!1},BN:{html_tag:"button",md_tag:void 0,isVoid:!1},BR:{html_tag:"br",md_tag:"\n",isVoid:!0},CO:{html_tag:"tt",md_tag:"`",isVoid:!1},DL:{html_tag:"del",md_tag:"~",isVoid:!1},EM:{html_tag:"i",md_tag:"_",isVoid:!1},EX:{html_tag:"",md_tag:void 0,isVoid:!0},FM:{html_tag:"div",md_tag:void 0,isVoid:!1},HD:{html_tag:"",md_tag:void 0,isVoid:!1},HL:{html_tag:"span",md_tag:void 0,isVoid:!1},HT:{html_tag:"a",md_tag:void 0,isVoid:!1},IM:{html_tag:"img",md_tag:void 0,isVoid:!1},LN:{html_tag:"a",md_tag:void 0,isVoid:!1},MN:{html_tag:"a",md_tag:void 0,isVoid:!1},RW:{html_tag:"div",md_tag:void 0,isVoid:!1},QQ:{html_tag:"div",md_tag:void 0,isVoid:!1},ST:{html_tag:"b",md_tag:"*",isVoid:!1},VC:{html_tag:"div",md_tag:void 0,isVoid:!1},VD:{html_tag:"video",md_tag:void 0,isVoid:!1}};function c(e,t,s){if(!e)return null;try{const s=atob(e),i=s.length,n=new ArrayBuffer(i),r=new Uint8Array(n);for(let e=0;e"",close:e=>""},EM:{open:e=>"",close:e=>""},DL:{open:e=>"",close:e=>""},CO:{open:e=>"",close:e=>""},BR:{open:e=>"
",close:e=>""},HD:{open:e=>"",close:e=>""},HL:{open:e=>'',close:e=>""},LN:{open:e=>'',close:e=>"",props:e=>e?{href:e.url,target:"_blank"}:null},MN:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},HT:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},BN:{open:e=>"",props:e=>e?{"data-act":e.act,"data-val":e.val,"data-name":e.name,"data-ref":e.ref}:null},AU:{open:e=>'",props:e=>e?{src:e.ref||c(e.val,e.mime,l.logger),"data-preload":e.ref?"metadata":"auto","data-duration":e.duration,"data-name":e.name,"data-size":e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},IM:{open:e=>{const t=h(e._tempPreview,e.mime),s=c(e.val,e.mime,l.logger),i=e.ref||s;return(e.name?'':"")+''},close:e=>e.name?"":"",props:e=>e?{src:h(e._tempPreview,e.mime)||e.ref||c(e.val,e.mime,l.logger),title:e.name,alt:e.name,"data-width":e.width,"data-height":e.height,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},FM:{open:e=>"
",close:e=>"
"},RW:{open:e=>"
",close:e=>"
"},QQ:{open:e=>"
",close:e=>"
",props:e=>e?{}:null},VC:{open:e=>"
",close:e=>"
",props:e=>e?{"data-duration":e.duration,"data-state":e.state}:{}},VD:{open:e=>{const t=h(e._tempPreview,e.mime),s=e.ref||c(e.preview,e.premime||"image/jpeg",l.logger);return''},close:e=>"",props:e=>{if(!e)return null;const t=e.preref||c(e.preview,e.premime||"image/jpeg",l.logger);return{src:t,"data-src":e.ref||c(e.val,e.mime,l.logger),"data-width":e.width,"data-height":e.height,"data-preload":e.ref?"metadata":"auto","data-preview":t,"data-duration":0|e.duration,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}}}},l=function(){this.txt="",this.fmt=[],this.ent=[]};function u(e,t,s,i){const n=[];if(0==i.length)return[];for(let s in i){const r=i[s];r.at>t&&n.push({txt:e.slice(t,r.at)});const a={tp:r.tp},o=u(e,r.at+1,r.end,r.children);o.length>0?a.children=o:a.txt=r.txt,n.push(a),t=r.end+1}return ts.end?(t.push(e[i]),s=e[i]):e[i].end<=s.end&&s.children.push(e[i]);for(let e in t)t[e].children=p(t[e].children);return t}function g(e){if(!e)return null;e="string"==typeof e?{txt:e}:e;let{txt:t,fmt:s,ent:i}=e;if(t=t||"",Array.isArray(i)||(i=[]),!Array.isArray(s)||0==s.length){if(0==i.length)return{text:t};s=[{at:0,len:0,key:0}]}const n=[],a=[];s.forEach((e=>{if(!e||"object"!=typeof e)return;if(!["undefined","number"].includes(typeof e.at))return;if(!["undefined","number"].includes(typeof e.len))return;let s=0|e.at,r=0|e.len;if(r<0)return;let o=e.key||0;i.length>0&&("number"!=typeof o||o<0||o>=i.length)||(s<=-1?a.push({start:-1,end:0,key:o}):s+r>t.length||(e.tp?n.push({type:e.tp,start:s,end:s+r}):i.length>0&&"object"==typeof i[o]&&n.push({start:s,end:s+r,key:o})))})),n.sort(((e,t)=>{let s=e.start-t.start;return 0!=s?s:(s=t.end-e.end,0!=s?s:r.indexOf(t.type)-r.indexOf(e.type))})),a.length>0&&n.push(...a),n.forEach((e=>{i.length>0&&!e.type&&i[e.key]&&"object"==typeof i[e.key]&&(e.type=i[e.key].tp,e.data=i[e.key].data),e.type||(e.type="HD")}));let o=m({},t,0,t.length,n);return o=b(o,(function(e){if(Array.isArray(e.children)&&1==e.children.length){const t=e.children[0];if(e.type)t.type||t.children||(e.text=t.text,delete e.children);else{const s=e.parent;(e=t).parent=s}}return e})),o}function f(e,t){return t?(e.children||(e.children=[]),e.text&&(e.children.push({text:e.text,parent:e}),delete e.text),t.parent=e,e.children.push(t),e):e}function m(e,t,s,i,n){if(!n||0==n.length)return s{_(e,t,s)})),t.type){const n=e.txt.length-i;if(e.fmt=e.fmt||[],Object.keys(t.data||{}).length>0){e.ent=e.ent||[];const r=void 0===s[t.key]?e.ent.length:s[t.key];s[t.key]=r,e.ent[r]={tp:t.type,data:t.data},t.att?e.fmt.push({at:-1,len:0,key:r}):e.fmt.push({at:i,len:n,key:r})}else e.fmt.push({tp:t.type,at:i,len:n})}return e}function b(e,t,s){if(!e)return null;let i=t.call(s,e);if(!i||!i.children)return i;const n=[];for(let e in i.children){let r=i.children[e];r&&(r=b(r,t,s),r&&n.push(r))}return 0==n.length?i.children=null:i.children=n,i}function w(e,t,s,i,n){if(!e)return null;i&&e.type&&i.push(e.type);let r=[];for(let s in e.children){const a=w(e.children[s],t,s,i,n);a&&r.push(a)}return 0==r.length&&(r=e.text?[e.text]:null),i&&e.type&&i.pop(),t.call(n,e.type,e.data,r,s,i)}function v(e,t,s){if(!e)return null;s&&(t-=s.length);return b(e,(function(e){if(t<=-1)return null;if(e.att)return e;if(0==t)e.text=s,t=-1;else if(e.text){const i=e.text.length;i>t?(e.text=e.text.substring(0,t)+s,t=-1):t-=i}return e}))}function y(e,t){return b(e,(e=>{const s=S(e.data,!0,t?t(e):null);return s?e.data=s:delete e.data,e}))}function M(e){if("BR"==e.type)e=null;else if(e.text)e.type||(e.text=e.text.trimStart(),e.text||(e=null));else if(!e.type&&e.children&&e.children.length>0){const t=M(e.children[0]);t?e.children[0]=t:(e.children.shift(),e.type||0!=e.children.length||(e=null))}return e}function T(e,t){if(!e)return null;if(e.att)e.text=" ",delete e.att,delete e.children;else if(e.children){const i=[],n=[];for(let r in e.children){const a=e.children[r];if(a.att){if(i.length==t)continue;if(a.data.mime==s)continue;delete a.att,delete a.children,a.text=" ",i.push(a)}else n.push(a)}e.children=n.concat(i)}return e}function P(e,t){let s="",i=[];for(let n in e){const r=e[n];if(!r.txt){const e=P(r.children,s.length+t);r.txt=e.txt,i=i.concat(e.fmt)}r.tp&&i.push({at:s.length+t,len:r.txt.length,tp:r.tp}),s+=r.txt}return{txt:s,fmt:i}}function S(e,s,n){if(e&&Object.entries(e).length>0){n=n||[];const r={};if(i.forEach((i=>{if(e[i]){if(s&&!n.includes(i)&&("string"==typeof e[i]||Array.isArray(e[i]))&&e[i].length>t)return;if("object"==typeof e[i])return;r[i]=e[i]}})),0!=Object.entries(r).length)return r}return null}l.init=function(e){if(void 0===e)e="";else if("string"!=typeof e)return null;return{txt:e}},l.parse=function(e){if("string"!=typeof e)return null;const t=e.split(/\r?\n/),s=[],i={},r=[];t.forEach((e=>{let t,o,c=[];if(n.forEach((t=>{c=c.concat(function(e,t,s,i){const n=[];let r=0,a=e.slice(0);for(;a.length>0;){const o=t.exec(a);if(null==o)break;let c=o.index+o[0].lastIndexOf(o[1]);a=a.slice(c+1),c+=r,r=c+1;const h=s?s.exec(a):null;if(null==h)break;let d=h.index+h[0].indexOf(h[1]);a=a.slice(d+1),d+=r,r=d+1,n.push({txt:e.slice(c+1,d),children:[],at:c,end:d,tp:i})}return n}(e,t.start,t.end,t.name))})),0==c.length)o={txt:e};else{c.sort(((e,t)=>{const s=e.at-t.at;return 0!=s?s:t.end-e.end})),c=p(c);const t=P(u(e,0,e.length,c),0);o={txt:t.txt,fmt:t.fmt}}if(t=function(e){let t,s=[];if(a.forEach((i=>{for(;null!==(t=i.re.exec(e));)s.push({offset:t.index,len:t[0].length,unique:t[0],data:i.pack(t[0]),type:i.name})})),0==s.length)return s;s.sort(((e,t)=>e.offset-t.offset));let i=-1;return s=s.filter((e=>{const t=e.offset>i;return i=e.offset+e.len,t})),s}(o.txt),t.length>0){const e=[];for(let n in t){const r=t[n];let a=i[r.unique];a||(a=s.length,i[r.unique]=a,s.push({tp:r.type,data:r.data})),e.push({at:r.offset,len:r.len,key:a})}o.ent=e}r.push(o)}));const o={txt:""};if(r.length>0){o.txt=r[0].txt,o.fmt=(r[0].fmt||[]).concat(r[0].ent||[]);for(let e=1;e(e.at+=s,e))))),t.ent&&(o.fmt=o.fmt.concat(t.ent.map((e=>(e.at+=s,e)))))}0==o.fmt.length&&delete o.fmt,s.length>0&&(o.ent=s)}return o},l.append=function(e,t){if(!e)return t;if(!t)return e;e.txt=e.txt||"";const s=e.txt.length;return"string"==typeof t?e.txt+=t:t.txt&&(e.txt+=t.txt),Array.isArray(t.fmt)&&(e.fmt=e.fmt||[],Array.isArray(t.ent)&&(e.ent=e.ent||[]),t.fmt.forEach((i=>{const n={at:(0|i.at)+s,len:0|i.len};-1==i.at&&(n.at=-1,n.len=0),i.tp?n.tp=i.tp:(n.key=e.ent.length,e.ent.push(t.ent[i.key||0])),e.fmt.push(n)}))),e},l.insertImage=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"IM",data:{mime:s.mime,ref:s.refurl,val:s.bits||s.preview,width:s.width,height:s.height,name:s.filename,size:0|s.size}};return s.urlPromise&&(i.data._tempPreview=s._tempPreview,i.data._processing=!0,s.urlPromise.then((e=>{i.data.ref=e,i.data._tempPreview=void 0,i.data._processing=void 0}),(e=>{i.data._processing=void 0}))),e.ent.push(i),e},l.insertVideo=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"VD",data:{mime:s.mime,ref:s.refurl,val:s.bits,preref:s.preref,preview:s.preview,width:s.width,height:s.height,duration:0|s.duration,name:s.filename,size:0|s.size}};return s.urlPromise&&(i.data._tempPreview=s._tempPreview,i.data._processing=!0,s.urlPromise.then((e=>{i.data.ref=e[0],i.data.preref=e[1],i.data._tempPreview=void 0,i.data._processing=void 0}),(e=>{i.data._processing=void 0}))),e.ent.push(i),e},l.insertAudio=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"AU",data:{mime:s.mime,val:s.bits,duration:0|s.duration,preview:s.preview,name:s.filename,size:0|s.size,ref:s.refurl}};return s.urlPromise&&(i.data._processing=!0,s.urlPromise.then((e=>{i.data.ref=e,i.data._processing=void 0}),(e=>{i.data._processing=void 0}))),e.ent.push(i),e},l.videoCall=function(e){return{txt:" ",fmt:[{at:0,len:1,key:0}],ent:[{tp:"VC",data:{aonly:e}}]}},l.updateVideoCall=function(e,t){const s=((e||{}).fmt||[])[0];if(!s)return e;let i;if("VC"==s.tp)delete s.tp,s.key=0,i={tp:"VC"},e.ent=[i];else if(i=(e.ent||[])[0|s.key],!i||"VC"!=i.tp)return e;return i.data=i.data||{},Object.assign(i.data,t),e},l.quote=function(e,t,s){const i=l.append(l.appendLineBreak(l.mention(e,t)),s);return i.fmt.push({at:0,len:i.txt.length,tp:"QQ"}),i},l.mention=function(e,t){return{txt:e||"",fmt:[{at:0,len:(e||"").length,key:0}],ent:[{tp:"MN",data:{val:t}}]}},l.appendLink=function(e,t){(e=e||{txt:""}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:e.txt.length,len:t.txt.length,key:e.ent.length}),e.txt+=t.txt;const s={tp:"LN",data:{url:t.url}};return e.ent.push(s),e},l.appendImage=function(e,t){return(e=e||{txt:""}).txt+=" ",l.insertImage(e,e.txt.length-1,t)},l.appendAudio=function(e,t){return(e=e||{txt:""}).txt+=" ",l.insertAudio(e,e.txt.length-1,t)},l.attachFile=function(e,t){(e=e||{txt:""}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:-1,len:0,key:e.ent.length});const s={tp:"EX",data:{mime:t.mime,val:t.data,name:t.filename,ref:t.refurl,size:0|t.size}};return t.urlPromise&&(s.data._processing=!0,t.urlPromise.then((e=>{s.data.ref=e,s.data._processing=void 0}),(e=>{s.data._processing=void 0}))),e.ent.push(s),e},l.wrapInto=function(e,t,s,i){return"string"==typeof e&&(e={txt:e}),e.fmt=e.fmt||[],e.fmt.push({at:s||0,len:i||e.txt.length,tp:t}),e},l.wrapAsForm=function(e,t,s){return l.wrapInto(e,"FM",t,s)},l.insertButton=function(e,t,s,i,n,r,a){return"string"==typeof e&&(e={txt:e}),!e||!e.txt||e.txt.length{switch(e.type){case"IM":return["val"];case"VD":return["preview"]}return null})),_({},s,[])},l.preview=function(e,t,s){let i=g(e);i=T(i,3);if(i=b(i,(function(e){return"MN"==e.type?e.parent&&e.parent.type||!(e.text||"").startsWith("➦")||(e.text="➦",delete e.children):"QQ"==e.type?(e.text=" ",delete e.children):"BR"==e.type&&(e.text=" ",delete e.children,delete e.type),e})),i=v(i,t,"…"),s){const e={IM:["val"],VD:["preview"]};i=y(i,(t=>e[t.type]))}else i=y(i);return _({},i,[])},l.toPlainText=function(e){return"string"==typeof e?e:e.txt},l.isPlainText=function(e){return"string"==typeof e||!(e.fmt||e.ent)},l.toMarkdown=function(e){return w(g(e),(function(e,t,s){const i=o[e];let n=s?s.join(""):"";return i&&(i.isVoid?n=i.md_tag||"":i.md_tag&&(n=i.md_tag+n+i.md_tag)),n}),0)},l.isValid=function(e){if(!e)return!1;const{txt:t,fmt:s,ent:i}=e;if(!t&&""!==t&&!s&&!i)return!1;const n=typeof t;return("string"==n||"undefined"==n||null===t)&&(!(void 0!==s&&!Array.isArray(s)&&null!==s)&&!(void 0!==i&&!Array.isArray(i)&&null!==i))},l.hasAttachments=function(e){if(!Array.isArray(e.fmt))return!1;for(let t in e.fmt){const s=e.fmt[t];if(s&&s.at<0){const t=e.ent[0|s.key];return t&&"EX"==t.tp&&t.data}}return!1},l.attachments=function(e,t,s){if(!Array.isArray(e.fmt))return;let i=0;for(let n in e.fmt){let r=e.fmt[n];if(r&&r.at<0){const n=e.ent[0|r.key];if(n&&"EX"==n.tp&&n.data&&t.call(s,n.data,i++,"EX"))break}}},l.hasEntities=function(e){return e.ent&&e.ent.length>0},l.entities=function(e,t,s){if(e.ent&&e.ent.length>0)for(let i in e.ent)if(e.ent[i]&&t.call(s,e.ent[i].data,i,e.ent[i].tp))break},l.styles=function(e,t,s){if(e.fmt&&e.fmt.length>0)for(let i in e.fmt){const n=e.fmt[i];if(n&&t.call(s,n.tp,n.at,n.len,n.key,i))break}},l.sanitizeEntities=function(e){if(e&&e.ent&&e.ent.length>0)for(let t in e.ent){const s=e.ent[t];if(s&&s.data){const i=S(s.data);i?e.ent[t].data=i:delete e.ent[t].data}}return e},l.getDownloadUrl=function(e){let t=null;return e.mime!=s&&e.val?t=c(e.val,e.mime,l.logger):"string"==typeof e.ref&&(t=e.ref),t},l.isProcessing=function(e){return!!e._processing},l.getPreviewUrl=function(e){return e.val?c(e.val,e.mime,l.logger):null},l.getEntitySize=function(e){return e.size?e.size:e.val?.75*e.val.length|0:0},l.getEntityMimeType=function(e){return e.mime||"text/plain"},l.tagName=function(e){return o[e]&&o[e].html_tag},l.attrValue=function(e,t){if(t&&d[e]&&d[e].props)return d[e].props(t)},l.getContentType=function(){return"text/x-drafty"},e.exports=l}},t={};function s(i){var n=t[i];if(void 0!==n)return n.exports;var r=t[i]={exports:{}};return e[i](r,r.exports,s),r.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var i in t)s.o(t,i)&&!s.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return(()=>{s.r(i),s.d(i,{AccessMode:()=>e,Drafty:()=>A(),Tinode:()=>W});class e{constructor(t){t&&(this.given="number"==typeof t.given?t.given:e.decode(t.given),this.want="number"==typeof t.want?t.want:e.decode(t.want),this.mode=t.mode?"number"==typeof t.mode?t.mode:e.decode(t.mode):this.given&this.want)}static#e(e,t,s){if(["given","want","mode"].includes(t=t||"mode"))return 0!=(e[t]&s);throw new Error(`Invalid AccessMode component '${t}'`)}static decode(t){if(!t)return null;if("number"==typeof t)return t&e._BITMASK;if("N"===t||"n"===t)return e._NONE;const s={J:e._JOIN,R:e._READ,W:e._WRITE,P:e._PRES,A:e._APPROVE,S:e._SHARE,D:e._DELETE,O:e._OWNER};let i=e._NONE;for(let e=0;e=20&&s.length<=24&&["ts","touched","updated","created","when","deleted","expires"].includes(t)){const e=new Date(s);if(!isNaN(e))return e}else if("acs"===t&&"object"==typeof s)return new e(s);return s}function g(e){return e&&!/^\s*([a-z][a-z0-9+.-]*:|\/\/)/im.test(e)}function f(e){return e instanceof Date&&!isNaN(e)&&0!=e.getTime()}function m(t,s,i){if("object"!=typeof s){if(void 0===s)return t;if(s===l)return;return s}if(null===s)return s;if(s instanceof Date&&!isNaN(s))return!t||!(t instanceof Date)||isNaN(t)||t{"_"==t[0]?delete e[t]:e[t]?Array.isArray(e[t])&&0==e[t].length?delete e[t]:e[t]?e[t]instanceof Date?f(e[t])||delete e[t]:"object"==typeof e[t]&&(b(e[t]),0==Object.getOwnPropertyNames(e[t]).length&&delete e[t]):delete e[t]:delete e[t]})),e}let w,v;const y="Connection failed",M=418,T="Disconnected by client";function P(e,t,s,i){let n=null;return["http","https","ws","wss"].includes(t)&&(n=`${t}://${e}`,"/"!==n.charAt(n.length-1)&&(n+="/"),n+="v"+s+"/channels",["http","https"].includes(t)&&(n+="/lp"),n+="?apikey="+i),n}class S{static#t=e=>{};#s=null;#i=0;#n=!1;#r=null;host;secure;apiKey;version;autoreconnect;initialized;constructor(e,t,s){if(this.host=e.host,this.secure=e.secure,this.apiKey=e.apiKey,this.version=t,this.autoreconnect=s,"lp"===e.transport?(this.#a(),this.initialized="lp"):"ws"===e.transport&&(this.#o(),this.initialized="ws"),!this.initialized)throw S.#t("Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'."),new Error("Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.")}static setNetworkProviders(e,t){w=e,v=t}static set logger(e){S.#t=e}connect(e,t){return Promise.reject(null)}reconnect(e){}disconnect(){}sendText(e){}isConnected(){return!1}transport(){return this.initialized}probe(){this.sendText("1")}backoffReset(){this.#c()}#h(){clearTimeout(this.#s);const e=Math.pow(2,this.#i)*(1+.3*Math.random())*2e3;this.#i=this.#i>=10?this.#i:this.#i+1,this.onAutoreconnectIteration&&this.onAutoreconnectIteration(e),this.#s=setTimeout((t=>{if(S.#t(`Reconnecting, iter=${this.#i}, timeout=${e}`),this.#n)this.onAutoreconnectIteration&&this.onAutoreconnectIteration(-1);else{const e=this.connect();this.onAutoreconnectIteration?this.onAutoreconnectIteration(0,e):e.catch((e=>{}))}}),e)}#d(){clearTimeout(this.#s),this.#s=null}#c(){this.#i=0}#a(){let e=null,t=null,s=null,i=(t,s,n)=>{let r=new v,a=!1;return r.onreadystatechange=o=>{if(4==r.readyState)if(201==r.status){let n=JSON.parse(r.responseText,p);e=t+"&sid="+n.ctrl.params.sid,r=i(e),r.send(null),this.onOpen&&this.onOpen(),s&&(a=!0,s()),this.autoreconnect&&this.#d()}else if(r.status>0&&r.status<400)this.onMessage&&this.onMessage(r.responseText),r=i(e),r.send(null);else{if(n&&!a&&(a=!0,n(r.responseText)),this.onMessage&&r.responseText&&this.onMessage(r.responseText),this.onDisconnect){const e=r.status||(this.#n?M:503),t=r.responseText||(this.#n?T:y);this.onDisconnect(new u(t,e),e)}r=null,!this.#n&&this.autoreconnect&&this.#h()}},r.open("POST",t,!0),r};this.connect=(e,s)=>{if(this.#n=!1,t){if(!s)return Promise.resolve();t.onreadystatechange=void 0,t.abort(),t=null}return e&&(this.host=e),new Promise(((e,s)=>{const n=P(this.host,this.secure?"https":"http",this.version,this.apiKey);S.#t("LP connecting to:",n),t=i(n,e,s),t.send(null)})).catch((e=>{S.#t("LP connection failed:",e)}))},this.reconnect=e=>{this.#d(),this.connect(null,e)},this.disconnect=i=>{this.#n=!0,this.#d(),s&&(s.onreadystatechange=void 0,s.abort(),s=null),t&&(t.onreadystatechange=void 0,t.abort(),t=null),this.onDisconnect&&this.onDisconnect(new u(T,M),M),e=null},this.sendText=t=>{if(s=(e=>{const t=new v;return t.onreadystatechange=e=>{if(4==t.readyState&&t.status>=400)throw new u("LP sender failed",t.status)},t.open("POST",e,!0),t})(e),!s||1!=s.readyState)throw new Error("Long poller failed to connect");s.send(t)},this.isConnected=e=>t&&!0}#o(){this.connect=(e,t)=>{if(this.#n=!1,this.#r){if(!t&&this.#r.readyState==this.#r.OPEN)return Promise.resolve();this.#r.close(),this.#r=null}return e&&(this.host=e),new Promise(((e,t)=>{const s=P(this.host,this.secure?"wss":"ws",this.version,this.apiKey);S.#t("WS connecting to: ",s);const i=new w(s);i.onerror=e=>{t(e)},i.onopen=t=>{this.autoreconnect&&this.#d(),this.onOpen&&this.onOpen(),e()},i.onclose=e=>{if(this.#r=null,this.onDisconnect){const e=this.#n?M:503;this.onDisconnect(new u(this.#n?T:y,e),e)}!this.#n&&this.autoreconnect&&this.#h()},i.onmessage=e=>{this.onMessage&&this.onMessage(e.data)},this.#r=i}))},this.reconnect=e=>{this.#d(),this.connect(null,e)},this.disconnect=e=>{this.#n=!0,this.#d(),this.#r&&(this.#r.close(),this.#r=null)},this.sendText=e=>{if(!this.#r||this.#r.readyState!=this.#r.OPEN)throw new Error("Websocket is not connected");this.#r.send(e)},this.isConnected=e=>this.#r&&this.#r.readyState==this.#r.OPEN}onMessage=void 0;onDisconnect=void 0;onOpen=void 0;onAutoreconnectIteration=void 0}S.NETWORK_ERROR=503,S.NETWORK_ERROR_TEXT=y,S.NETWORK_USER=M,S.NETWORK_USER_TEXT=T;const x="tinode-web";let k;class E{#l=e=>{};#u=e=>{};db=null;disabled=!0;constructor(e,t){this.#l=e||this.#l,this.#u=t||this.#u}#p(e,t,s){return this.db?new Promise(((i,n)=>{const r=this.db.transaction([e]);r.onerror=t=>{this.#u("PCache","mapObjects",e,t.target.error),n(t.target.error)},r.objectStore(e).getAll().onsuccess=e=>{t&&e.target.result.forEach((e=>{t.call(s,e)})),i(e.target.result)}})):disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"))}initDatabase(){return new Promise(((e,t)=>{const s=k.open(x,1);s.onsuccess=t=>{this.db=t.target.result,this.disabled=!1,e(this.db)},s.onerror=e=>{this.#u("PCache","failed to initialize",e),t(e.target.error),this.#l(e.target.error)},s.onupgradeneeded=e=>{this.db=e.target.result,this.db.onerror=e=>{this.#u("PCache","failed to create storage",e),this.#l(e.target.error)},this.db.createObjectStore("topic",{keyPath:"name"}),this.db.createObjectStore("user",{keyPath:"uid"}),this.db.createObjectStore("subscription",{keyPath:["topic","uid"]}),this.db.createObjectStore("message",{keyPath:["topic","seq"]})}}))}deleteDatabase(){return this.db&&(this.db.close(),this.db=null),new Promise(((e,t)=>{const s=k.deleteDatabase(x);s.onblocked=e=>{this.db&&this.db.close();const s=new Error("blocked");this.#u("PCache","deleteDatabase",s),t(s)},s.onsuccess=t=>{this.db=null,this.disabled=!0,e(!0)},s.onerror=e=>{this.#u("PCache","deleteDatabase",e.target.error),t(e.target.error)}}))}isReady(){return!!this.db}updTopic(e){return this.isReady()?new Promise(((t,s)=>{const i=this.db.transaction(["topic"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","updTopic",e.target.error),s(e.target.error)};const n=i.objectStore("topic").get(e.name);n.onsuccess=t=>{i.objectStore("topic").put(E.#g(n.result,e)),i.commit()}})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}markTopicAsDeleted(e,t){return this.isReady()?new Promise(((s,i)=>{const n=this.db.transaction(["topic"],"readwrite");n.oncomplete=e=>{s(e.target.result)},n.onerror=e=>{this.#u("PCache","markTopicAsDeleted",e.target.error),i(e.target.error)};n.objectStore("topic").get(e).onsuccess=e=>{const s=e.target.result;s&&s._deleted!=t&&(s._deleted=t,n.objectStore("topic").put(s)),n.commit()}})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remTopic(e){return this.isReady()?new Promise(((t,s)=>{const i=this.db.transaction(["topic","subscription","message"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","remTopic",e.target.error),s(e.target.error)},i.objectStore("topic").delete(IDBKeyRange.only(e)),i.objectStore("subscription").delete(IDBKeyRange.bound([e,"-"],[e,"~"])),i.objectStore("message").delete(IDBKeyRange.bound([e,0],[e,Number.MAX_SAFE_INTEGER])),i.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapTopics(e,t){return this.#p("topic",e,t)}deserializeTopic(e,t){E.#f(e,t)}updUser(e,t){if(!(arguments.length<2||void 0===t))return this.isReady()?new Promise(((s,i)=>{const n=this.db.transaction(["user"],"readwrite");n.oncomplete=e=>{s(e.target.result)},n.onerror=e=>{this.#u("PCache","updUser",e.target.error),i(e.target.error)},n.objectStore("user").put({uid:e,public:t}),n.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remUser(e){return this.isReady()?new Promise(((t,s)=>{const i=this.db.transaction(["user"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","remUser",e.target.error),s(e.target.error)},i.objectStore("user").delete(IDBKeyRange.only(e)),i.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapUsers(e,t){return this.#p("user",e,t)}getUser(e){return this.isReady()?new Promise(((t,s)=>{const i=this.db.transaction(["user"]);i.oncomplete=e=>{const s=e.target.result;t({user:s.uid,public:s.public})},i.onerror=e=>{this.#u("PCache","getUser",e.target.error),s(e.target.error)},i.objectStore("user").get(e)})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updSubscription(e,t,s){return this.isReady()?new Promise(((i,n)=>{const r=this.db.transaction(["subscription"],"readwrite");r.oncomplete=e=>{i(e.target.result)},r.onerror=e=>{this.#u("PCache","updSubscription",e.target.error),n(e.target.error)},r.objectStore("subscription").get([e,t]).onsuccess=i=>{r.objectStore("subscription").put(E.#m(i.target.result,e,t,s)),r.commit()}})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapSubscriptions(e,t,s){return this.isReady()?new Promise(((i,n)=>{const r=this.db.transaction(["subscription"]);r.onerror=e=>{this.#u("PCache","mapSubscriptions",e.target.error),n(e.target.error)},r.objectStore("subscription").getAll(IDBKeyRange.bound([e,"-"],[e,"~"])).onsuccess=e=>{t&&e.target.result.forEach((e=>{t.call(s,e)})),i(e.target.result)}})):this.disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"))}addMessage(e){return this.isReady()?new Promise(((t,s)=>{const i=this.db.transaction(["message"],"readwrite");i.onsuccess=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","addMessage",e.target.error),s(e.target.error)},i.objectStore("message").add(E.#_(null,e)),i.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updMessageStatus(e,t,s){return this.isReady()?new Promise(((i,n)=>{const r=this.db.transaction(["message"],"readwrite");r.onsuccess=e=>{i(e.target.result)},r.onerror=e=>{this.#u("PCache","updMessageStatus",e.target.error),n(e.target.error)};const a=r.objectStore("message").get(IDBKeyRange.only([e,t]));a.onsuccess=i=>{const n=a.result||i.target.result;n&&n._status!=s?(r.objectStore("message").put(E.#_(n,{topic:e,seq:t,_status:s})),r.commit()):r.commit()}})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remMessages(e,t,s){return this.isReady()?new Promise(((i,n)=>{t||s||(t=0,s=Number.MAX_SAFE_INTEGER);const r=s>0?IDBKeyRange.bound([e,t],[e,s],!1,!0):IDBKeyRange.only([e,t]),a=this.db.transaction(["message"],"readwrite");a.onsuccess=e=>{i(e.target.result)},a.onerror=e=>{this.#u("PCache","remMessages",e.target.error),n(e.target.error)},a.objectStore("message").delete(r),a.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}readMessages(e,t,s,i){return this.isReady()?new Promise(((n,r)=>{const a=(t=t||{}).since>0?t.since:0,o=t.before>0?t.before:Number.MAX_SAFE_INTEGER,c=0|t.limit,h=[],d=IDBKeyRange.bound([e,a],[e,o],!1,!0),l=this.db.transaction(["message"]);l.onerror=e=>{this.#u("PCache","readMessages",e.target.error),r(e.target.error)},l.objectStore("message").openCursor(d,"prev").onsuccess=e=>{const t=e.target.result;t?(s&&s.call(i,t.value),h.push(t.value),c<=0||h.length{t.hasOwnProperty(s)&&(e[s]=t[s])})),Array.isArray(t.tags)&&(e._tags=t.tags),t.acs&&e.setAccessMode(t.acs),e.seq|=0,e.read|=0,e.unread=Math.max(0,e.seq-e.read)}static#g(e,t){const s=e||{name:t.name};return E.#b.forEach((e=>{t.hasOwnProperty(e)&&(s[e]=t[e])})),Array.isArray(t._tags)&&(s.tags=t._tags),t.acs&&(s.acs=t.getAccessMode().jsonHelper()),s}static#m(e,t,s,i){const n=e||{topic:t,uid:s};return["updated","mode","read","recv","clear","lastSeen","userAgent"].forEach((e=>{i.hasOwnProperty(e)&&(n[e]=i[e])})),n}static#_(e,t){const s=e||{};return["topic","seq","ts","_status","from","head","content"].forEach((e=>{t.hasOwnProperty(e)&&(s[e]=t[e])})),s}static setDatabaseProvider(e){k=e}}var D=s(672),A=s.n(D);let R,C,N,q;class I{constructor(e,t){this._tinode=e,this._version=t,this._apiKey=e._apiKey,this._authToken=e.getAuthToken(),this.xhr=[]}uploadWithBaseUrl(e,t,s,i,n,r){let a=`/v${this._version}/file/u/`;if(e){let t=e;if(t.endsWith("/")&&(t=t.slice(0,-1)),!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Invalid base URL '${e}'`);a=t+a}const o=this,c=new R;this.xhr.push(c),c.open("POST",a,!0),c.setRequestHeader("X-Tinode-APIKey",this._apiKey),this._authToken&&c.setRequestHeader("X-Tinode-Auth",`Token ${this._authToken.token}`);let h=null,d=null;const l=new Promise(((e,t)=>{h=e,d=t}));c.upload.onprogress=e=>{e.lengthComputable&&(i&&i(e.loaded/e.total),this.onProgress&&this.onProgress(e.loaded/e.total))},c.onload=function(){let e;try{e=JSON.parse(this.response,p)}catch(t){o._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.response),e={ctrl:{code:this.status,text:this.statusText}}}this.status>=200&&this.status<300?(h&&h(e.ctrl.params.url),n&&n(e.ctrl)):this.status>=400?(d&&d(new u(e.ctrl.text,e.ctrl.code)),r&&r(e.ctrl)):o._tinode.logger("ERROR: Unexpected server response status",this.status,this.response)},c.onerror=function(e){d&&d(e||new Error("failed")),r&&r(null)},c.onabort=function(e){d&&d(new Error("upload cancelled by user")),r&&r(null)};try{const e=new FormData;e.append("file",t),e.set("id",this._tinode.getNextUniqueId()),s&&e.set("topic",s),c.send(e)}catch(e){d&&d(e),r&&r(null)}return l}upload(e,t,s,i,n){const r=(this._tinode._secure?"https://":"http://")+this._tinode._host;return this.uploadWithBaseUrl(r,e,t,s,i,n)}download(e,t,s,i,n){if(!g(e))return void(n&&n(`The URL '${e}' must be relative, not absolute`));if(!this._authToken)return void(n&&n("Must authenticate first"));const r=this,a=new R;this.xhr.push(a),e=function(e,t,s){const i=new URL(e,window.location.origin);return i.searchParams.append(t,s),i.toString().substring(window.location.origin.length)}(e,"asatt","1"),a.open("GET",e,!0),a.setRequestHeader("X-Tinode-APIKey",this._apiKey),a.setRequestHeader("X-Tinode-Auth","Token "+this._authToken.token),a.responseType="blob",a.onprogress=function(e){i&&i(e.loaded)};let o=null,c=null;const h=new Promise(((e,t)=>{o=e,c=t}));a.onload=function(){if(200==this.status){const e=document.createElement("a");e.href=window.URL.createObjectURL(new Blob([this.response],{type:s})),e.style.display="none",e.setAttribute("download",t),document.body.appendChild(e),e.click(),document.body.removeChild(e),window.URL.revokeObjectURL(e.href),o&&o()}else if(this.status>=400&&c){const e=new FileReader;e.onload=function(){try{const e=JSON.parse(this.result,p);c(new u(e.ctrl.text,e.ctrl.code))}catch(e){r._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.result),c(e)}},e.readAsText(this.response)}},a.onerror=function(e){c&&c(new Error("failed")),n&&n(e)},a.onabort=function(){c&&c(null)};try{a.send()}catch(e){c&&c(e),n&&n(e)}return h}cancel(){this.xhr.forEach((e=>{e.readyState<4&&e.abort()}))}static setNetworkProvider(e){R=e}}class U{constructor(e){this.topic=e,this.what={}}#w(){return this.topic._deleted?void 0:this.topic.updated}#v(){return this.topic.isP2PType()?this.#w():this.topic._deleted?void 0:this.topic._lastSubsUpdate}withData(e,t,s){return this.what.data={since:e,before:t,limit:s},this}withLaterData(e){return this.withData(this.topic._maxSeq>0?this.topic._maxSeq+1:void 0,void 0,e)}withEarlierData(e){return this.withData(void 0,this.topic._minSeq>0?this.topic._minSeq:void 0,e)}withDesc(e){return this.what.desc={ims:e},this}withLaterDesc(){return this.withDesc(this.#w())}withSub(e,t,s){const i={ims:e,limit:t};return"me"==this.topic.getType()?i.topic=s:i.user=s,this.what.sub=i,this}withOneSub(e,t){return this.withSub(e,void 0,t)}withLaterOneSub(e){return this.withOneSub(this.topic._lastSubsUpdate,e)}withLaterSub(e){return this.withSub(this.#v(),e)}withTags(){return this.what.tags=!0,this}withCred(){return"me"==this.topic.getType()?this.what.cred=!0:this.topic._tinode.logger("ERROR: Invalid topic type for MetaGetBuilder:withCreds",this.topic.getType()),this}withDel(e,t){return(e||t)&&(this.what.del={since:e,limit:t}),this}withLaterDel(e){return this.withDel(this.topic._maxSeq>0?this.topic._maxDel+1:void 0,e)}extract(e){return this.what[e]}build(){const e=[];let t={};return["data","sub","desc","tags","cred","del"].forEach((s=>{this.what.hasOwnProperty(s)&&(e.push(s),Object.getOwnPropertyNames(this.what[s]).length>0&&(t[s]=this.what[s]))})),e.length>0?t.what=e.join(" "):t=void 0,t}}class O{#y=void 0;#M=!1;buffer=[];constructor(e,t){this.#y=e||((e,t)=>e===t?0:e0)){o=!0;break}n=r-1}return o?{idx:r,exact:!0}:s?{idx:-1}:{idx:a<0?r+1:r}}#P(e,t){const s=this.#T(e,t,!1),i=s.exact&&this.#M?1:0;return t.splice(s.idx,i,e),t}getAt(e){return this.buffer[e]}getLast(e){return e|=0,this.buffer.length>e?this.buffer[this.buffer.length-1-e]:void 0}put(){let e;e=1==arguments.length&&Array.isArray(arguments[0])?arguments[0]:arguments;for(let t in e)this.#P(e[t],this.buffer)}delAt(e){e|=0;let t=this.buffer.splice(e,1);if(t&&t.length>0)return t[0]}delRange(e,t){return this.buffer.splice(e,t-e)}length(){return this.buffer.length}reset(){this.buffer=[]}forEach(e,t,s,i){t|=0,s=s||this.buffer.length;for(let n=t;nt?this.buffer[n-1]:void 0,ne.seq-t.seq),!0),this._attached=!1,this._lastSubsUpdate=new Date(0),this._new=!0,this._deleted=!1,this._delayedLeaveTimer=null,s&&(this.onData=s.onData,this.onMeta=s.onMeta,this.onPres=s.onPres,this.onInfo=s.onInfo,this.onMetaDesc=s.onMetaDesc,this.onMetaSub=s.onMetaSub,this.onSubsUpdated=s.onSubsUpdated,this.onTagsUpdated=s.onTagsUpdated,this.onCredsUpdated=s.onCredsUpdated,this.onDeleteTopic=s.onDeleteTopic,this.onAllMessagesReceived=s.onAllMessagesReceived)}static topicType(e){return{me:o,fnd:c,grp:h,new:h,nch:h,chn:h,usr:"p2p",sys:"sys"}["string"==typeof e?e.substring(0,3):"xxx"]}static isMeTopicName(e){return j.topicType(e)==o}static isGroupTopicName(e){return j.topicType(e)==h}static isP2PTopicName(e){return"p2p"==j.topicType(e)}static isCommTopicName(e){return j.isP2PTopicName(e)||j.isGroupTopicName(e)}static isNewGroupTopicName(e){return"string"==typeof e&&(e.substring(0,3)==r||e.substring(0,3)==a)}static isChannelTopicName(e){return"string"==typeof e&&("chn"==e.substring(0,3)||e.substring(0,3)==a)}isSubscribed(){return this._attached}subscribe(e,t){return clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=null,this._attached?Promise.resolve(this):this._tinode.subscribe(this.name||r,e,t).then((e=>{if(e.code>=300)return e;if(this._attached=!0,this._deleted=!1,this.acs=e.params&&e.params.acs?e.params.acs:this.acs,this._new){if(delete this._new,this.name!=e.topic&&(this._cacheDelSelf(),this.name=e.topic),this._cachePutSelf(),this.created=e.ts,this.updated=e.ts,this.name!=o&&this.name!=c){const e=this._tinode.getMeTopic();e.onMetaSub&&e.onMetaSub(this),e.onSubsUpdated&&e.onSubsUpdated([this.name],1)}t&&t.desc&&(t.desc._noForwarding=!0,this._processMetaDesc(t.desc))}return e}))}createMessage(e,t){return this._tinode.createMessage(this.name,e,t)}publish(e,t){return this.publishMessage(this.createMessage(e,t))}publishMessage(e){if(!this._attached)return Promise.reject(new Error("Cannot publish on inactive topic"));if(this._sending)return Promise.reject(new Error("The message is already being sent"));e._sending=!0,e._failed=!1;let t=null;return A().hasEntities(e.content)&&(t=[],A().entities(e.content,(e=>{e&&(e.ref&&t.push(e.ref),e.preref&&t.push(e.preref))})),0==t.length&&(t=null)),this._tinode.publishMessage(e,t).then((t=>(e._sending=!1,e.ts=t.ts,this.swapMessageId(e,t.params.seq),this._maybeUpdateMessageVersionsCache(e),this._routeData(e),t))).catch((t=>{this._tinode.logger("WARNING: Message rejected by the server",t),e._sending=!1,e._failed=!0,this.onData&&this.onData()}))}publishDraft(e,t){const s=e.seq||this._getQueuedSeqId();return e._noForwarding||(e._noForwarding=!0,e.seq=s,e.ts=new Date,e.from=this._tinode.getCurrentUserID(),e.noecho=!0,this._messages.put(e),this._tinode._db.addMessage(e),this.onData&&this.onData(e)),(t||Promise.resolve()).then((t=>e._cancelled?{code:300,text:"cancelled"}:this.publishMessage(e))).catch((t=>{throw this._tinode.logger("WARNING: Message draft rejected",t),e._sending=!1,e._failed=!0,e._fatal=t instanceof u&&(t.code>=400&&t.code<500),this.onData&&this.onData(),t}))}leave(e){return this._attached||e?this._tinode.leave(this.name,e).then((t=>(this._resetSub(),e&&this._gone(),t))):Promise.reject(new Error("Cannot leave inactive topic"))}leaveDelayed(e,t){clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=setTimeout((t=>{this._delayedLeaveTimer=null,this.leave(e)}),t)}getMeta(e){return this._tinode.getMeta(this.name,e)}getMessagesPage(e,t){let s=t?this.startMetaQuery().withLaterData(e):this.startMetaQuery().withEarlierData(e);return this._loadMessages(this._tinode._db,s.extract("data")).then((i=>{if(i==e)return Promise.resolve({topic:this.name,code:200,params:{count:i}});e-=i,s=t?this.startMetaQuery().withLaterData(e):this.startMetaQuery().withEarlierData(e);let n=this.getMeta(s.build());return t||(n=n.then((e=>{e&&e.params&&!e.params.count&&(this._noEarlierMsgs=!0)}))),n}))}setMeta(e){return e.tags&&(e.tags=function(e){let t=[];if(Array.isArray(e)){for(let s=0,i=e.length;s1&&t.push(i))}t.sort().filter((function(e,t,s){return!t||e!=s[t-1]}))}return 0==t.length&&t.push(l),t}(e.tags)),this._tinode.setMeta(this.name,e).then((t=>(t&&t.code>=300||(e.sub&&(e.sub.topic=this.name,t.params&&t.params.acs&&(e.sub.acs=t.params.acs,e.sub.updated=t.ts),e.sub.user||(e.sub.user=this._tinode.getCurrentUserID(),e.desc||(e.desc={})),e.sub._noForwarding=!0,this._processMetaSubs([e.sub])),e.desc&&(t.params&&t.params.acs&&(e.desc.acs=t.params.acs,e.desc.updated=t.ts),this._processMetaDesc(e.desc)),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds([e.cred],!0)),t)))}updateMode(e,t){const s=e?this.subscriber(e):null,i=s?s.acs.updateGiven(t).getGiven():this.getAccessMode().updateWant(t).getWant();return this.setMeta({sub:{user:e,mode:i}})}invite(e,t){return this.setMeta({sub:{user:e,mode:t}})}archive(e){return this.private&&!this.private.arch==!e?Promise.resolve(e):this.setMeta({desc:{private:{arch:!!e||l}}})}delMessages(e,t){if(!this._attached)return Promise.reject(new Error("Cannot delete messages in inactive topic"));e.sort(((e,t)=>e.low=t.hi)));let s,i=e.reduce(((e,t)=>(t.low0?this._tinode.delMessages(this.name,i,t):Promise.resolve({params:{del:0}}),s.then((t=>(t.params.del>this._maxDel&&(this._maxDel=t.params.del),e.forEach((e=>{e.hi?this.flushMessageRange(e.low,e.hi):this.flushMessage(e.low)})),this.onData&&this.onData(),t)))}delMessagesAll(e){return!this._maxSeq||this._maxSeq<=0?Promise.resolve():this.delMessages([{low:1,hi:this._maxSeq+1,_all:!0}],e)}delMessagesList(e,t){e.sort(((e,t)=>e-t));let s=e.reduce(((e,t)=>{if(0==e.length)e.push({low:t});else{let s=e[e.length-1];!s.hi&&t!=s.low+1||t>s.hi?e.push({low:t}):s.hi=s.hi?Math.max(s.hi,t+1):t+1}return e}),[]);return this.delMessages(s,t)}delMessagesEdits(e,t){const s=[e];return this.messageVersions(e,(e=>s.push(e.seq))),this.delMessagesList(s,t)}delTopic(e){return this._deleted?(this._gone(),Promise.resolve(null)):this._tinode.delTopic(this.name,e).then((e=>(this._deleted=!0,this._resetSub(),this._gone(),e)))}delSubscription(e){return this._attached?this._tinode.delSubscription(this.name,e).then((t=>(delete this._users[e],this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._users)),t))):Promise.reject(new Error("Cannot delete subscription in inactive topic"))}note(e,t){if(!this._attached)return;const s=this._users[this._tinode.getCurrentUserID()];let i=!1;if(s?(!s[e]||s[e]0&&this.note("read",e)}noteKeyPress(){this._attached?this._tinode.noteKeyPress(this.name):this._tinode.logger("INFO: Cannot send notification in inactive topic")}noteRecording(e){this._attached?this._tinode.noteKeyPress(this.name,e?"kpa":"kpv"):this._tinode.logger("INFO: Cannot send notification in inactive topic")}videoCall(e,t,s){if(this._attached||["ringing","hang-up"].includes(e))return this._tinode.videoCall(this.name,t,e,s)}_updateMyReadRecv(e,t,s){let i,n=!1;switch(t|=0,this.seq=0|this.seq,this.read=0|this.read,this.recv=0|this.recv,e){case"recv":i=this.recv,this.recv=Math.max(this.recv,t),n=i!=this.recv;break;case"read":i=this.read,this.read=Math.max(this.read,t),n=i!=this.read;break;case"msg":i=this.seq,this.seq=Math.max(this.seq,t),(!this.touched||this.touched{if(this._isReplacementMsg(e))return;const r=this.latestMsgVersion(e.seq)||e;r._origTs||(r._origTs=r.ts,r._origSeq=r.seq,r.ts=e.ts,r.seq=e.seq),t.push({data:r,idx:n})}),e,r,{}),t.forEach(((e,s)=>{n.call(i,e.data,s>0?t[s-1].data:void 0,s=0)return this._messages.getAt(t)}latestMessage(){return this._messages.getLast()}latestMsgVersion(e){const t=this._messageVersions[e];return t?t.getLast():null}maxMsgSeq(){return this._maxSeq}minMsgSeq(){return this._minSeq}maxClearId(){return this._maxDel}messageCount(){return this._messages.length()}queuedMessages(e,t){if(!e)throw new Error("Callback must be provided");this.messages(e,d,void 0,t)}msgReceiptCount(e,t){let s=0;if(t>0){const i=this._tinode.getCurrentUserID();for(let n in this._users){const r=this._users[n];r.user!==i&&r[e]>=t&&s++}}return s}msgReadCount(e){return this.msgReceiptCount("read",e)}msgRecvCount(e){return this.msgReceiptCount("recv",e)}msgHasMoreMessages(e){return e?this.seq>this._maxSeq:this._minSeq>1&&!this._noEarlierMsgs}isNewMessage(e){return this._maxSeq<=e}flushMessage(e){const t=this._messages.find({seq:e});if(delete this._messageVersions[e],t>=0)return this._tinode._db.remMessages(this.name,e),this._messages.delAt(t)}flushMessageRange(e,t){this._tinode._db.remMessages(this.name,e,t);for(let s=e;s=0?this._messages.delRange(s,this._messages.find({seq:t},!0)):[]}swapMessageId(e,t){const s=this._messages.find(e),i=this._messages.length();0<=s&&s=0){const s=this._messages.getAt(t),i=this.msgStatus(s);if(10==i||30==i||40==i)return this._tinode._db.remMessages(this.name,e),s._cancelled=!0,this._messages.delAt(t),this.onData&&this.onData(),!0}return!1}getType(){return j.topicType(this.name)}getAccessMode(){return this.acs}setAccessMode(t){return this.acs=new e(t)}getDefaultAccess(){return this.defacs}startMetaQuery(){return new U(this)}isArchived(){return this.private&&!!this.private.arch}isMeType(){return j.isMeTopicName(this.name)}isChannelType(){return j.isChannelTopicName(this.name)}isGroupType(){return j.isGroupTopicName(this.name)}isP2PType(){return j.isP2PTopicName(this.name)}isCommType(){return j.isCommTopicName(this.name)}msgStatus(e,t){let s=0;return this._tinode.isMe(e.from)?e._sending?s=20:e._fatal||e._cancelled?s=40:e._failed?s=30:e.seq>=d?s=10:this.msgReadCount(e.seq)>0?s=70:this.msgRecvCount(e.seq)>0?s=60:e.seq>0&&(s=50):s=80,t&&e._status!=s&&(e._status=s,this._tinode._db.updMessageStatus(this.name,e.seq,s)),s}_isReplacementMsg(e){return e.head&&e.head.replace}_maybeUpdateMessageVersionsCache(e){if(!this._isReplacementMsg(e))return void(this._messageVersions[e.seq]&&(this._messageVersions[e.seq].filter((t=>t.from==e.from)),this._messageVersions[e.seq].isEmpty()&&delete this._messageVersions[e.seq]));const t=parseInt(e.head.replace.split(":")[1]);if(t>e.seq)return;const s=this.findMessage(t);if(s&&s.from!=e.from)return;const i=this._messageVersions[t]||new O(((e,t)=>e.seq-t.seq),!0);i.put(e),this._messageVersions[t]=i}_routeData(e){e.content&&(!this.touched||this.touchedthis._maxSeq&&(this._maxSeq=e.seq,this.msgStatus(e,!0),clearTimeout(this._recvNotificationTimer),this._recvNotificationTimer=setTimeout((e=>{this._recvNotificationTimer=null,this.noteRecv(this._maxSeq)}),100)),(e.seq0&&this._processMetaSubs(e.sub),e.del&&this._processDelMessages(e.del.clear,e.del.delseq),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds(e.cred),this.onMeta&&this.onMeta(e)}_routePres(t){let s,i;switch(t.what){case"del":this._processDelMessages(t.clear,t.delseq);break;case"on":case"off":s=this._users[t.src],s?s.online="on"==t.what:this._tinode.logger("WARNING: Presence update for an unknown user",this.name,t.src);break;case"term":this._resetSub();break;case"upd":t.src&&!this._tinode.isTopicCached(t.src)&&this.getMeta(this.startMetaQuery().withOneSub(void 0,t.src).build());break;case"acs":if(i=t.src||this._tinode.getCurrentUserID(),s=this._users[i],s)s.acs.updateAll(t.dacs),this._processMetaSubs([{user:i,updated:new Date,acs:s.acs}]);else{const n=(new e).updateAll(t.dacs);n&&n.mode!=e._NONE&&(s=this._cacheGetUser(i),s?s.acs=n:(s={user:i,acs:n},this.getMeta(this.startMetaQuery().withOneSub(void 0,i).build())),s.updated=new Date,this._processMetaSubs([s]))}break;default:this._tinode.logger("INFO: Ignored presence update",t.what)}this.onPres&&this.onPres(t)}_routeInfo(e){switch(e.what){case"recv":case"read":const t=this._users[e.from];t&&(t[e.what]=e.seq,t.recv0&&this.onData&&this.onData()}_allMessagesReceived(e){this.onAllMessagesReceived&&this.onAllMessagesReceived(e)}_resetSub(){this._attached=!1}_gone(){this._messages.reset(),this._tinode._db.remMessages(this.name),this._users={},this.acs=new e(null),this.private=null,this.public=null,this.trusted=null,this._maxSeq=0,this._minSeq=0,this._attached=!1;const t=this._tinode.getMeTopic();t&&t._routePres({_noForwarding:!0,what:"gone",topic:o,src:this.name}),this.onDeleteTopic&&this.onDeleteTopic()}_updateCachedUser(e,t){let s=this._cacheGetUser(e);return s=m(s||{},t),this._cachePutUser(e,s),_(this._users,e,s)}_getQueuedSeqId(){return this._queuedSeqId++}_loadMessages(e,t){const{since:s,before:i,limit:n}=t||{};return e.readMessages(this.name,{since:s,before:i,limit:n||24}).then((e=>(e.forEach((e=>{e.seq>this._maxSeq&&(this._maxSeq=e.seq),(e.seq{e.online&&(e.online=!1,e.seen=Object.assign(e.seen||{},{when:new Date}),this._refreshContact("off",e))})),this.onMetaDesc&&this.onMetaDesc(this)}_processMetaSubs(e){let t=0;if(e.forEach((e=>{const s=e.topic;if(s==c||s==o)return;e.online=!!e.online;let i=null;if(e.deleted)i=e,this._tinode.cacheRemTopic(s),this._tinode._db.remTopic(s);else{void 0!==e.seq&&(e.seq=0|e.seq,e.recv=0|e.recv,e.read=0|e.read,e.unread=e.seq-e.read);const t=this._tinode.getTopic(s);t._new&&delete t._new,i=m(t,e),this._tinode._db.updTopic(i),j.isP2PTopicName(s)&&(this._cachePutUser(s,i),this._tinode._db.updUser(s,i.public)),!e._noForwarding&&t&&(e._noForwarding=!0,t._processMetaDesc(e))}t++,this.onMetaSub&&this.onMetaSub(i)})),this.onSubsUpdated&&t>0){const s=[];e.forEach((e=>{s.push(e.topic)})),this.onSubsUpdated(s,t)}}_processMetaCreds(e,t){1==e.length&&e[0]==l&&(e=[]),t?e.forEach((e=>{if(e.val){let t=this._credentials.findIndex((t=>t.meth==e.meth&&t.val==e.val));t<0?(e.done||(t=this._credentials.findIndex((t=>t.meth==e.meth&&!t.done)),t>=0&&this._credentials.splice(t,1)),this._credentials.push(e)):this._credentials[t].done=e.done}else if(e.resp){const t=this._credentials.findIndex((t=>t.meth==e.meth&&!t.done));t>=0&&(this._credentials[t].done=!0)}})):this._credentials=e,this.onCredsUpdated&&this.onCredsUpdated(this._credentials)}_routePres(t){if("term"==t.what)return void this._resetSub();if("upd"==t.what&&t.src==o)return void this.getMeta(this.startMetaQuery().withDesc().build());const s=this._tinode.cacheGetTopic(t.src);if(s){switch(t.what){case"on":s.online=!0;break;case"off":s.online&&(s.online=!1,s.seen=Object.assign(s.seen||{},{when:new Date}));break;case"msg":s._updateReceived(t.seq,t.act);break;case"upd":this.getMeta(this.startMetaQuery().withLaterOneSub(t.src).build());break;case"acs":t.tgt||(s.acs?s.acs.updateAll(t.dacs):s.acs=(new e).updateAll(t.dacs),s.touched=new Date);break;case"ua":s.seen={when:new Date,ua:t.ua};break;case"recv":t.seq=0|t.seq,s.recv=s.recv?Math.max(s.recv,t.seq):t.seq;break;case"read":t.seq=0|t.seq,s.read=s.read?Math.max(s.read,t.seq):t.seq,s.recv=s.recv?Math.max(s.read,s.recv):s.recv,s.unread=s.seq-s.read;break;case"gone":this._tinode.cacheRemTopic(t.src),s._deleted?this._tinode._db.remTopic(t.src):(s._deleted=!0,s._attached=!1,this._tinode._db.markTopicAsDeleted(t.src,!0));break;case"del":break;default:this._tinode.logger("INFO: Unsupported presence update in 'me'",t.what)}this._refreshContact(t.what,s)}else{if("acs"==t.what){const s=new e(t.dacs);if(!s||s.mode==e._INVALID)return void this._tinode.logger("ERROR: Invalid access mode update",t.src,t.dacs);if(s.mode==e._NONE)return void this._tinode.logger("WARNING: Removing non-existent subscription",t.src,t.dacs);{this.getMeta(this.startMetaQuery().withOneSub(void 0,t.src).build());const e=this._tinode.getTopic(t.src);e.online=!1,e.acs=s,this._tinode._db.updTopic(e)}}else if("tags"==t.what)this.getMeta(this.startMetaQuery().withTags().build());else if("msg"==t.what){this.getMeta(this.startMetaQuery().withOneSub(void 0,t.src).build());const e=this._tinode.getTopic(t.src);e._deleted=!1,this._tinode._db.updTopic(e)}this._refreshContact(t.what,s)}this.onPres&&this.onPres(t)}_refreshContact(e,t){this.onContactUpdate&&this.onContactUpdate(e,t)}publish(){return Promise.reject(new Error("Publishing to 'me' is not supported"))}delCredential(e,t){return this._attached?this._tinode.delCredential(e,t).then((s=>{const i=this._credentials.findIndex((s=>s.meth==e&&s.val==t));return i>-1&&this._credentials.splice(i,1),this.onCredsUpdated&&this.onCredsUpdated(this._credentials),s})):Promise.reject(new Error("Cannot delete credential in inactive 'me' topic"))}contacts(e,t,s){this._tinode.mapTopics(((i,n)=>{!i.isCommType()||t&&!t(i)||e.call(s,i,n)}))}getContact(e){return this._tinode.cacheGetTopic(e)}getAccessMode(e){if(e){const t=this._tinode.cacheGetTopic(e);return t?t.acs:null}return this.acs}isArchived(e){const t=this._tinode.cacheGetTopic(e);return t&&t.private&&!!t.private.arch}getCredentials(){return this._credentials}}class V extends j{_contacts={};constructor(e){super(c,e)}_processMetaSubs(e){let t=Object.getOwnPropertyNames(this._contacts).length;this._contacts={};for(let s in e){let i=e[s];const n=i.topic?i.topic:i.user;i=_(this._contacts,n,i),t++,this.onMetaSub&&this.onMetaSub(i)}t>0&&this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._contacts))}publish(){return Promise.reject(new Error("Publishing to 'fnd' is not supported"))}setMeta(e){return Object.getPrototypeOf(V.prototype).setMeta.call(this,e).then((e=>{Object.keys(this._contacts).length>0&&(this._contacts={},this.onSubsUpdated&&this.onSubsUpdated([]))}))}contacts(e,t){const s=e||this.onMetaSub;if(s)for(let e in this._contacts)s.call(t,this._contacts[e],e,this._contacts)}}function G(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(function(e,t){return String.fromCharCode("0x"+t)})))}function z(t,s){if(s instanceof Date)s=function(e){if(!f(e))return;const t=function(e,t){return"0".repeat((t=t||2)-(""+e).length)+e},s=e.getUTCMilliseconds();return e.getUTCFullYear()+"-"+t(e.getUTCMonth()+1)+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+(s?"."+t(s,3):"")+"Z"}(s);else if(s instanceof e)s=s.jsonHelper();else if(null==s||!1===s||Array.isArray(s)&&0==s.length||"object"==typeof s&&0==Object.keys(s).length)return;return s}function F(e,t){return"string"==typeof t&&t.length>128?"<"+t.length+", bytes: "+t.substring(0,12)+"..."+t.substring(t.length-12)+">":z(0,t)}"undefined"!=typeof WebSocket&&(C=WebSocket),"undefined"!=typeof XMLHttpRequest&&(N=XMLHttpRequest),"undefined"!=typeof indexedDB&&(q=indexedDB),function(){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";"undefined"==typeof btoa&&(s.g.btoa=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",s="";for(let i,n=0,r=0,a=e;t.charAt(0|r)||(a="=",r%1);s+=a.charAt(63&n>>8-r%1*8)){if(i=t.charCodeAt(r+=3/4),i>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");n=n<<8|i}return s});"undefined"==typeof atob&&(s.g.atob=function(){let t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/=+$/,""),s="";if(t.length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(let i,n=0,r=0,a=0;i=t.charAt(a++);~i&&(r=n%4?64*r+i:i,n++%4)?s+=String.fromCharCode(255&r>>(-2*n&6)):0)i=e.indexOf(i);return s});"undefined"==typeof window&&(s.g.window={WebSocket:C,XMLHttpRequest:N,indexedDB:q,URL:{createObjectURL:function(){throw new Error("Unable to use URL.createObjectURL in a non-browser application")}}});S.setNetworkProviders(C,N),I.setNetworkProvider(N),E.setDatabaseProvider(q)}();class W{_host;_secure;_appName;_apiKey;_browser="";_platform;_hwos="undefined";_humanLanguage="xx";_loggingEnabled=!1;_trimLongStrings=!1;_myUID=null;_authenticated=!1;_login=null;_authToken=null;_inPacketCount=0;_messageId=Math.floor(65535*Math.random()+65535);_serverInfo=null;_deviceToken=null;_pendingPromises={};_expirePromises=null;_connection=null;_persist=!1;_db=null;_cache={};constructor(e,t){if(this._host=e.host,this._secure=e.secure,this._appName=e.appName||"Undefined",this._apiKey=e.apiKey,this._platform=e.platform||"web","undefined"!=typeof navigator&&(this._browser=function(e,t){e=e||"";let s,i="";/reactnative/i.test(t)&&(i="ReactNative; ");let n=(e=e.replace(" (KHTML, like Gecko)","")).match(/(AppleWebKit\/[.\d]+)/i);if(n){const t=["edg","chrome","safari","mobile","version"];let i,r=e.substr(n.index+n[0].length).split(" "),a=[];for(let e=0;es[1].toLowerCase().startsWith(e)))]),"Version"==s[1]&&(i=s[2]))}a.sort(((e,t)=>e[2]-t[2])),a.length>0?(a[0][0].toLowerCase().startsWith("edg")?a[0][0]="Edge":"OPR"==a[0][0]?a[0][0]="Opera":"Safari"==a[0][0]&&i&&(a[0][1]=i),s=a[0][0]+"/"+a[0][1]):s=n[1]}else/firefox/i.test(e)?(n=/Firefox\/([.\d]+)/g.exec(e),s=n?"Firefox/"+n[1]:"Firefox/?"):(n=/([\w.]+)\/([.\d]+)/.exec(e),n?s=n[1]+"/"+n[2]:(n=e.split(" "),s=n[0]));if(n=s.split("/"),n.length>1){const e=n[1].split("."),t=e[1]?"."+e[1].substr(0,2):"";s=`${n[0]}/${e[0]}${t}`}return i+s}(navigator.userAgent,navigator.product),this._hwos=navigator.platform,this._humanLanguage=navigator.language||"en-US"),S.logger=this.logger,A().logger=this.logger,"lp"!=e.transport&&"ws"!=e.transport&&(e.transport=function(){if("object"==typeof window){if(window.WebSocket)return"ws";if(window.XMLHttpRequest)return"lp"}return null}()),this._connection=new S(e,"0",!0),this._connection.onMessage=e=>{this.#S(e)},this._connection.onOpen=e=>this.#x(),this._connection.onDisconnect=(e,t)=>this.#k(e,t),this._connection.onAutoreconnectIteration=(e,t)=>{this.onAutoreconnectIteration&&this.onAutoreconnectIteration(e,t)},this._persist=e.persist,this._db=new E((e=>{this.logger("DB",e)}),this.logger),this._persist){const e=[];this._db.initDatabase().then((t=>this._db.mapTopics((t=>{let s=this.#E("topic",t.name);s||(s=t.name==o?new L:t.name==c?new V:new j(t.name),this._db.deserializeTopic(s,t),this.#D(s),s._cachePutSelf(),delete s._new,e.push(s._loadMessages(this._db)))})))).then((e=>this._db.mapUsers((e=>{this.#A("user",e.uid,m({},e.public))})))).then((t=>Promise.all(e))).then((e=>{t&&t(),this.logger("Persistent cache initialized.")})).catch((e=>{t&&t(e),this.logger("Failed to initialize persistent cache:",e)}))}else this._db.deleteDatabase().then((e=>{t&&t()}))}logger(e){if(this._loggingEnabled){const n=new Date,r=("0"+n.getUTCHours()).slice(-2)+":"+("0"+n.getUTCMinutes()).slice(-2)+":"+("0"+n.getUTCSeconds()).slice(-2)+"."+("00"+n.getUTCMilliseconds()).slice(-3);for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i{this._pendingPromises[e]={resolve:t,reject:s,ts:new Date}}))),t}#C(e,t,s,i){const n=this._pendingPromises[e];n&&(delete this._pendingPromises[e],t>=200&&t<400?n.resolve&&n.resolve(s):n.reject&&n.reject(new u(i,t)))}#N(e,t){let s;t&&(s=this.#R(t)),e=b(e);let i=JSON.stringify(e);this.logger("out: "+(this._trimLongStrings?JSON.stringify(e,F):i));try{this._connection.sendText(i)}catch(e){if(!t)throw e;this.#C(t,S.NETWORK_ERROR,null,e.message)}return s}#S(e){if(!e)return;if(this._inPacketCount++,this.onRawMessage&&this.onRawMessage(e),"0"===e)return void(this.onNetworkProbe&&this.onNetworkProbe());let t=JSON.parse(e,p);t?(this.logger("in: "+(this._trimLongStrings?JSON.stringify(t,F):e)),this.onMessage&&this.onMessage(t),t.ctrl?(this.onCtrlMessage&&this.onCtrlMessage(t.ctrl),t.ctrl.id&&this.#C(t.ctrl.id,t.ctrl.code,t.ctrl,t.ctrl.text),setTimeout((e=>{if(205==t.ctrl.code&&"evicted"==t.ctrl.text){const e=this.#E("topic",t.ctrl.topic);e&&(e._resetSub(),t.ctrl.params&&t.ctrl.params.unsub&&e._gone())}else if(t.ctrl.code<300&&t.ctrl.params)if("data"==t.ctrl.params.what){const e=this.#E("topic",t.ctrl.topic);e&&e._allMessagesReceived(t.ctrl.params.count)}else if("sub"==t.ctrl.params.what){const e=this.#E("topic",t.ctrl.topic);e&&e._processMetaSubs([])}}),0)):setTimeout((e=>{if(t.meta){const e=this.#E("topic",t.meta.topic);e&&e._routeMeta(t.meta),t.meta.id&&this.#C(t.meta.id,200,t.meta,"META"),this.onMetaMessage&&this.onMetaMessage(t.meta)}else if(t.data){const e=this.#E("topic",t.data.topic);e&&e._routeData(t.data),this.onDataMessage&&this.onDataMessage(t.data)}else if(t.pres){const e=this.#E("topic",t.pres.topic);e&&e._routePres(t.pres),this.onPresMessage&&this.onPresMessage(t.pres)}else if(t.info){const e=this.#E("topic",t.info.topic);e&&e._routeInfo(t.info),this.onInfoMessage&&this.onInfoMessage(t.info)}else this.logger("ERROR: Unknown packet received.")}),0)):(this.logger("in: "+e),this.logger("ERROR: failed to parse data"))}#x(){this._expirePromises||(this._expirePromises=setInterval((e=>{const t=new u("timeout",504),s=new Date((new Date).getTime()-5e3);for(let e in this._pendingPromises){let i=this._pendingPromises[e];i&&i.ts{e._resetSub()}));for(let t in this._pendingPromises){const s=this._pendingPromises[t];s&&s.reject&&s.reject(e)}this._pendingPromises={},this.onDisconnect&&this.onDisconnect(e)}#I(){return this._appName+" ("+(this._browser?this._browser+"; ":"")+this._hwos+"); "+n}#U(e,s){switch(e){case"hi":return{hi:{id:this.getNextUniqueId(),ver:t,ua:this.#I(),dev:this._deviceToken,lang:this._humanLanguage,platf:this._platform}};case"acc":return{acc:{id:this.getNextUniqueId(),user:null,scheme:null,secret:null,tmpscheme:null,tmpsecret:null,login:!1,tags:null,desc:{},cred:{}}};case"login":return{login:{id:this.getNextUniqueId(),scheme:null,secret:null}};case"sub":return{sub:{id:this.getNextUniqueId(),topic:s,set:{},get:{}}};case"leave":return{leave:{id:this.getNextUniqueId(),topic:s,unsub:!1}};case"pub":return{pub:{id:this.getNextUniqueId(),topic:s,noecho:!1,head:null,content:{}}};case"get":return{get:{id:this.getNextUniqueId(),topic:s,what:null,desc:{},sub:{},data:{}}};case"set":return{set:{id:this.getNextUniqueId(),topic:s,desc:{},sub:{},tags:[],ephemeral:{}}};case"del":return{del:{id:this.getNextUniqueId(),topic:s,what:null,delseq:null,user:null,hard:!1}};case"note":return{note:{topic:s,what:null,seq:void 0}};default:throw new Error(`Unknown packet type requested: ${e}`)}}#A(e,t,s){this._cache[e+":"+t]=s}#E(e,t){return this._cache[e+":"+t]}#O(e,t){delete this._cache[e+":"+t]}#q(e,t,s){const i=e?e+":":void 0;for(let e in this._cache)if((!i||0==e.indexOf(i))&&t.call(s,this._cache[e],e))break}#D(e){e._tinode=this,e._cacheGetUser=e=>{const t=this.#E("user",e);if(t)return{user:e,public:m({},t)}},e._cachePutUser=(e,t)=>{this.#A("user",e,m({},t.public))},e._cacheDelUser=e=>{this.#O("user",e)},e._cachePutSelf=t=>{this.#A("topic",e.name,e)},e._cacheDelSelf=t=>{this.#O("topic",e.name)}}#j(e){return e.params&&e.params.user?(this._myUID=e.params.user,this._authenticated=e&&e.code>=200&&e.code<300,e.params&&e.params.token&&e.params.expires?this._authToken={token:e.params.token,expires:e.params.expires}:this._authToken=null,this.onLogin&&this.onLogin(e.code,e.text),e):e}static credential(e,t,s,i){return"object"==typeof e&&({val:t,params:s,resp:i,meth:e}=e),e&&(t||i)?[{meth:e,val:t,resp:i,params:s}]:null}static topicType(e){return j.topicType(e)}static isMeTopicName(e){return j.isMeTopicName(e)}static isGroupTopicName(e){return j.isGroupTopicName(e)}static isP2PTopicName(e){return j.isP2PTopicName(e)}static isCommTopicName(e){return j.isCommTopicName(e)}static isNewGroupTopicName(e){return j.isNewGroupTopicName(e)}static isChannelTopicName(e){return j.isChannelTopicName(e)}static getVersion(){return t}static setNetworkProviders(e,t){C=e,N=t,S.setNetworkProviders(C,N),I.setNetworkProvider(N)}static setDatabaseProvider(e){q=e,E.setDatabaseProvider(q)}static getLibrary(){return n}static isNullValue(e){return e===l}getNextUniqueId(){return 0!=this._messageId?""+this._messageId++:void 0}connect(e){return this._connection.connect(e)}reconnect(e){this._connection.reconnect(e)}disconnect(){this._connection.disconnect()}clearStorage(){return this._db.isReady()?this._db.deleteDatabase():Promise.resolve()}initStorage(){return this._db.isReady()?Promise.resolve():this._db.initDatabase()}networkProbe(){this._connection.probe()}isConnected(){return this._connection.isConnected()}isAuthenticated(){return this._authenticated}authorizeURL(e){if("string"!=typeof e)return e;if(g(e)){const t="scheme://host/",s=new URL(e,t);this._apiKey&&s.searchParams.append("apikey",this._apiKey),this._authToken&&this._authToken.token&&(s.searchParams.append("auth","token"),s.searchParams.append("secret",this._authToken.token)),e=s.toString().substring(t.length-1)}return e}account(e,t,s,i,n){const r=this.#U("acc");return r.acc.user=e,r.acc.scheme=t,r.acc.secret=s,r.acc.login=i,n&&(r.acc.desc.defacs=n.defacs,r.acc.desc.public=n.public,r.acc.desc.private=n.private,r.acc.desc.trusted=n.trusted,r.acc.tags=n.tags,r.acc.cred=n.cred,r.acc.tmpscheme=n.scheme,r.acc.tmpsecret=n.secret,Array.isArray(n.attachments)&&n.attachments.length>0&&(r.extra={attachments:n.attachments.filter((e=>g(e)))})),this.#N(r,r.acc.id)}createAccount(e,t,s,i){let n=this.account("new",e,t,s,i);return s&&(n=n.then((e=>this.#j(e)))),n}createAccountBasic(e,t,s){return e=e||"",t=t||"",this.createAccount("basic",G(e+":"+t),!0,s)}updateAccountBasic(e,t,s,i){return t=t||"",s=s||"",this.account(e,"basic",G(t+":"+s),!1,i)}hello(){const e=this.#U("hi");return this.#N(e,e.hi.id).then((e=>(this._connection.backoffReset(),e.params&&(this._serverInfo=e.params),this.onConnect&&this.onConnect(),e))).catch((e=>{this._connection.reconnect(!0),this.onDisconnect&&this.onDisconnect(e)}))}setDeviceToken(e){let t=!1;return(e=e||null)!=this._deviceToken&&(this._deviceToken=e,this.isConnected()&&this.isAuthenticated()&&(this.#N({hi:{dev:e||W.DEL_CHAR}}),t=!0)),t}login(e,t,s){const i=this.#U("login");return i.login.scheme=e,i.login.secret=t,i.login.cred=s,this.#N(i,i.login.id).then((e=>this.#j(e)))}loginBasic(e,t,s){return this.login("basic",G(e+":"+t),s).then((t=>(this._login=e,t)))}loginToken(e,t){return this.login("token",e,t)}requestResetAuthSecret(e,t,s){return this.login("reset",G(e+":"+t+":"+s))}getAuthToken(){return this._authToken&&this._authToken.expires.getTime()>Date.now()?this._authToken:(this._authToken=null,null)}setAuthToken(e){this._authToken=e}subscribe(e,t,s){const i=this.#U("sub",e);if(e||(e=r),i.sub.get=t,s){if(s.sub&&(i.sub.set.sub=s.sub),s.desc){const t=s.desc;W.isNewGroupTopicName(e)?i.sub.set.desc=t:W.isP2PTopicName(e)&&t.defacs&&(i.sub.set.desc={defacs:t.defacs})}Array.isArray(s.attachments)&&s.attachments.length>0&&(i.extra={attachments:s.attachments.filter((e=>g(e)))}),s.tags&&(i.sub.set.tags=s.tags)}return this.#N(i,i.sub.id)}leave(e,t){const s=this.#U("leave",e);return s.leave.unsub=t,this.#N(s,s.leave.id)}createMessage(e,t,s){const i=this.#U("pub",e);let n="string"==typeof t?A().parse(t):t;return n&&!A().isPlainText(n)&&(i.pub.head={mime:A().getContentType()},t=n),i.pub.noecho=s,i.pub.content=t,i.pub}publish(e,t,s){return this.publishMessage(this.createMessage(e,t,s))}publishMessage(e,t){(e=Object.assign({},e)).seq=void 0,e.from=void 0,e.ts=void 0;const s={pub:e};return t&&(s.extra={attachments:t.filter((e=>g(e)))}),this.#N(s,e.id)}oobNotification(t){switch(this.logger("oob: "+(this._trimLongStrings?JSON.stringify(t,F):t)),t.what){case"msg":if(!t.seq||t.seq<1||!t.topic)break;if(!this.isConnected())break;const s=this.#E("topic",t.topic);if(!s)break;if(s.isSubscribed())break;s.maxMsgSeq(){this.logger("Failed to get the name of a new sender",e)})),s.subscribe(null).then((e=>s.getMeta(new U(s).withLaterData(24).withLaterDel(24).build()))).then((e=>{s.leaveDelayed(!1,1e3)})).catch((e=>{this.logger("On push data fetch failed",e)})).finally((e=>{this.getMeTopic()._refreshContact("msg",s)})));break;case"read":this.getMeTopic()._routePres({what:"read",seq:t.seq});break;case"sub":if(!this.isMe(t.xfrom))break;const i={given:t.modeGiven,want:t.modeWant},n=new e(i),r=n.mode&&n.mode!=e._NONE?{what:"acs",src:t.topic,dacs:i}:{what:"gone",src:t.topic};this.getMeTopic()._routePres(r);break;default:this.logger("Unknown push type ignored",t.what)}}getMeta(e,t){const s=this.#U("get",e);return s.get=m(s.get,t),this.#N(s,s.get.id)}setMeta(e,t){const s=this.#U("set",e),i=[];return t&&(["desc","sub","tags","cred","ephemeral"].forEach((function(e){t.hasOwnProperty(e)&&(i.push(e),s.set[e]=t[e])})),Array.isArray(t.attachments)&&t.attachments.length>0&&(s.extra={attachments:t.attachments.filter((e=>g(e)))})),0==i.length?Promise.reject(new Error("Invalid {set} parameters")):this.#N(s,s.set.id)}delMessages(e,t,s){const i=this.#U("del",e);return i.del.what="msg",i.del.delseq=t,i.del.hard=s,this.#N(i,i.del.id)}delTopic(e,t){const s=this.#U("del",e);return s.del.what="topic",s.del.hard=t,this.#N(s,s.del.id)}delSubscription(e,t){const s=this.#U("del",e);return s.del.what="sub",s.del.user=t,this.#N(s,s.del.id)}delCredential(e,t){const s=this.#U("del",o);return s.del.what="cred",s.del.cred={meth:e,val:t},this.#N(s,s.del.id)}delCurrentUser(e){const t=this.#U("del",null);return t.del.what="user",t.del.hard=e,this.#N(t,t.del.id).then((e=>{this._myUID=null}))}note(e,t,s){if(s<=0||s>=d)throw new Error(`Invalid message id ${s}`);const i=this.#U("note",e);i.note.what=t,i.note.seq=s,this.#N(i)}noteKeyPress(e,t){const s=this.#U("note",e);s.note.what=t||"kp",this.#N(s)}videoCall(e,t,s,i){const n=this.#U("note",e);n.note.seq=t,n.note.what="call",n.note.event=s,n.note.payload=i,this.#N(n,n.note.id)}getTopic(e){let t=this.#E("topic",e);return!t&&e&&(t=e==o?new L:e==c?new V:new j(e),this.#D(t),t._cachePutSelf()),t}cacheGetTopic(e){return this.#E("topic",e)}cacheRemTopic(e){this.#O("topic",e)}mapTopics(e,t){this.#q("topic",e,t)}isTopicCached(e){return!!this.#E("topic",e)}newGroupTopicName(e){return(e?a:r)+this.getNextUniqueId()}getMeTopic(){return this.getTopic(o)}getFndTopic(){return this.getTopic(c)}getLargeFileHelper(){return new I(this,"0")}getCurrentUserID(){return this._myUID}isMe(e){return this._myUID===e}getCurrentLogin(){return this._login}getServerInfo(){return this._serverInfo}report(e,t){return this.publish("sys",A().attachJSON(null,{action:e,target:t}))}getServerParam(e,t){return this._serverInfo&&this._serverInfo[e]||t}enableLogging(e,t){this._loggingEnabled=e,this._trimLongStrings=e&&t}setHumanLanguage(e){e&&(this._humanLanguage=e)}isTopicOnline(e){const t=this.#E("topic",e);return t&&t.online}getTopicAccessMode(e){const t=this.#E("topic",e);return t?t.acs:null}wantAkn(e){this._messageId=e?Math.floor(16777215*Math.random()+16777215):0}onWebsocketOpen=void 0;onConnect=void 0;onDisconnect=void 0;onLogin=void 0;onCtrlMessage=void 0;onDataMessage=void 0;onPresMessage=void 0;onMessage=void 0;onRawMessage=void 0;onNetworkProbe=void 0;onAutoreconnectIteration=void 0}W.MESSAGE_STATUS_NONE=0,W.MESSAGE_STATUS_QUEUED=10,W.MESSAGE_STATUS_SENDING=20,W.MESSAGE_STATUS_FAILED=30,W.MESSAGE_STATUS_FATAL=40,W.MESSAGE_STATUS_SENT=50,W.MESSAGE_STATUS_RECEIVED=60,W.MESSAGE_STATUS_READ=70,W.MESSAGE_STATUS_TO_ME=80,W.DEL_CHAR=l,W.MAX_MESSAGE_SIZE="maxMessageSize",W.MAX_SUBSCRIBER_COUNT="maxSubscriberCount",W.MAX_TAG_COUNT="maxTagCount",W.MAX_FILE_UPLOAD_SIZE="maxFileUploadSize",W.REQ_CRED_VALIDATORS="reqCred",W.URI_TOPIC_ID_PREFIX="tinode:topic/"})(),i})())); +!function(u,D){"object"==typeof exports&&"object"==typeof module?module.exports=D():"function"==typeof define&&define.amd?define([],D):"object"==typeof exports?exports.tinode=D():u.tinode=D()}(this,(()=>(()=>{"use strict";var u={32:(u,D,e)=>{function t(u){return Intl.getCanonicalLocales(u)}function C(u,D){var e=D.zoneNames,t=D.uppercaseLinks,C=u.toUpperCase(),F=e.reduce((function(u,D){return u[D.toUpperCase()]=D,u}),{}),A=t[C]||F[C];return"Etc/UTC"===A||"Etc/GMT"===A?"UTC":A}function F(u){if("symbol"==typeof u)throw TypeError("Cannot convert a Symbol value to a string");return String(u)}function A(u){if(void 0===u)return NaN;if(null===u)return 0;if("boolean"==typeof u)return u?1:0;if("number"==typeof u)return u;if("symbol"==typeof u||"bigint"==typeof u)throw new TypeError("Cannot convert symbol/bigint to number");return Number(u)}function E(u){return isFinite(u)?Math.abs(u)>8640000000000001?NaN:function(u){var D=A(u);if(isNaN(D)||n(D,-0))return 0;if(isFinite(D))return D;var e=Math.floor(Math.abs(D));return D<0&&(e=-e),n(e,-0)?0:e}(u):NaN}function r(u){if(null==u)throw new TypeError("undefined/null cannot be converted to object");return Object(u)}function n(u,D){return Object.is?Object.is(u,D):u===D?0!==u||1/u==1/D:u!=u&&D!=D}function i(u){return new Array(u)}function s(u,D){return Object.prototype.hasOwnProperty.call(u,D)}function a(u){return null===u?"Null":void 0===u?"Undefined":"function"==typeof u||"object"==typeof u?"Object":"number"==typeof u?"Number":"boolean"==typeof u?"Boolean":"string"==typeof u?"String":"symbol"==typeof u?"Symbol":"bigint"==typeof u?"BigInt":void 0}e.r(D),e.d(D,{ApplyUnsignedRoundingMode:()=>J,ArrayCreate:()=>i,CanonicalizeLocaleList:()=>t,CanonicalizeTimeZoneName:()=>C,CoerceOptionsToObject:()=>I,CollapseNumberRange:()=>Q,ComputeExponent:()=>su,ComputeExponentForMagnitude:()=>Eu,CurrencyDigits:()=>au,DateFromTime:()=>y,Day:()=>c,DayFromYear:()=>l,DayWithinYear:()=>f,DaysInYear:()=>p,FormatApproximately:()=>Bu,FormatNumericRange:()=>bu,FormatNumericRangeToParts:()=>wu,FormatNumericToParts:()=>vu,FormatNumericToString:()=>iu,GetNumberOption:()=>O,GetOption:()=>U,GetOptionsObject:()=>q,GetStringOrBooleanOption:()=>$,GetUnsignedRoundingMode:()=>Tu,HasOwnProperty:()=>s,HourFromTime:()=>x,InLeapYear:()=>g,InitializeNumberFormat:()=>Nu,IsSanctionedSimpleUnitIdentifier:()=>H,IsValidTimeZoneName:()=>z,IsWellFormedCurrencyCode:()=>W,IsWellFormedUnitIdentifier:()=>Z,MinFromTime:()=>P,MonthFromTime:()=>m,OrdinaryHasInstance:()=>R,PartitionNumberPattern:()=>mu,PartitionNumberRangePattern:()=>yu,PartitionPattern:()=>Iu,RangePatternType:()=>Ou,SANCTIONED_UNITS:()=>G,SIMPLE_UNITS:()=>V,SameValue:()=>n,SecFromTime:()=>k,SetNumberFormatDigitOptions:()=>Pu,SetNumberFormatUnitOptions:()=>ku,SupportedLocales:()=>Lu,TimeClip:()=>E,TimeFromYear:()=>h,ToNumber:()=>A,ToObject:()=>r,ToRawFixed:()=>nu,ToRawPrecision:()=>ru,ToString:()=>F,Type:()=>a,WeekDay:()=>d,YearFromTime:()=>_,_formatToParts:()=>_u,defineProperty:()=>Fu,getInternalSlot:()=>eu,getMagnitude:()=>Y,getMultiInternalSlots:()=>tu,invariant:()=>Au,isLiteralPart:()=>Cu,isMissingLocaleDataError:()=>qu,msFromTime:()=>N,removeUnitNamespace:()=>j,setInternalSlot:()=>uu,setMultiInternalSlots:()=>Du});var B=864e5;function o(u,D){return u-Math.floor(u/D)*D}function c(u){return Math.floor(u/B)}function d(u){return o(c(u)+4,7)}function l(u){return Date.UTC(u,0)/B}function h(u){return Date.UTC(u,0)}function _(u){return new Date(u).getUTCFullYear()}function p(u){return u%4!=0?365:u%100!=0?366:u%400!=0?365:366}function f(u){return c(u)-l(_(u))}function g(u){return 365===p(_(u))?0:1}function m(u){var D=f(u),e=g(u);if(D>=0&&D<31)return 0;if(D<59+e)return 1;if(D<90+e)return 2;if(D<120+e)return 3;if(D<151+e)return 4;if(D<181+e)return 5;if(D<212+e)return 6;if(D<243+e)return 7;if(D<273+e)return 8;if(D<304+e)return 9;if(D<334+e)return 10;if(D<365+e)return 11;throw new Error("Invalid time")}function y(u){var D=f(u),e=m(u),t=g(u);if(0===e)return D+1;if(1===e)return D-30;if(2===e)return D-58-t;if(3===e)return D-89-t;if(4===e)return D-119-t;if(5===e)return D-150-t;if(6===e)return D-180-t;if(7===e)return D-211-t;if(8===e)return D-242-t;if(9===e)return D-272-t;if(10===e)return D-303-t;if(11===e)return D-333-t;throw new Error("Invalid time")}var b=24,w=60,v=60,S=1e3,M=S*v,T=M*w;function x(u){return o(Math.floor(u/T),b)}function P(u){return o(Math.floor(u/M),w)}function k(u){return o(Math.floor(u/S),v)}function R(u,D,e){if("function"!=typeof u)return!1;if(null==e?void 0:e.boundTargetFunction)return D instanceof(null==e?void 0:e.boundTargetFunction);if("object"!=typeof D)return!1;var t=u.prototype;if("object"!=typeof t)throw new TypeError("OrdinaryHasInstance called on an object with an invalid prototype property.");return Object.prototype.isPrototypeOf.call(t,D)}function N(u){return o(u,S)}function I(u){return void 0===u?Object.create(null):r(u)}function L(u,D,e,t){if(void 0===u)return t;var C=Number(u);if(isNaN(C)||Ce)throw new RangeError("".concat(C," is outside of range [").concat(D,", ").concat(e,"]"));return Math.floor(C)}function O(u,D,e,t,C){return L(u[D],e,t,C)}function U(u,D,e,t,C){if("object"!=typeof u)throw new TypeError("Options must be an object");var A=u[D];if(void 0!==A){if("boolean"!==e&&"string"!==e)throw new TypeError("invalid type");if("boolean"===e&&(A=Boolean(A)),"string"===e&&(A=F(A)),void 0!==t&&!t.filter((function(u){return u==A})).length)throw new RangeError("".concat(A," is not within ").concat(t.join(", ")));return A}return C}function q(u){if(void 0===u)return Object.create(null);if("object"==typeof u)return u;throw new TypeError("Options must be an object")}function $(u,D,e,t,C,A){var E=u[D];if(void 0===E)return A;if(!0===E)return t;if(!1===Boolean(E))return C;if("true"===(E=F(E))||"false"===E)return A;if(-1===(e||[]).indexOf(E))throw new RangeError("Invalid value ".concat(E));return E}var G=["angle-degree","area-acre","area-hectare","concentr-percent","digital-bit","digital-byte","digital-gigabit","digital-gigabyte","digital-kilobit","digital-kilobyte","digital-megabit","digital-megabyte","digital-petabyte","digital-terabit","digital-terabyte","duration-day","duration-hour","duration-millisecond","duration-minute","duration-month","duration-second","duration-week","duration-year","length-centimeter","length-foot","length-inch","length-kilometer","length-meter","length-mile-scandinavian","length-mile","length-millimeter","length-yard","mass-gram","mass-kilogram","mass-ounce","mass-pound","mass-stone","temperature-celsius","temperature-fahrenheit","volume-fluid-ounce","volume-gallon","volume-liter","volume-milliliter"];function j(u){return u.slice(u.indexOf("-")+1)}var V=G.map(j);function H(u){return V.indexOf(u)>-1}function z(u,D){var e=D.zoneNamesFromData,t=D.uppercaseLinks,C=u.toUpperCase(),F=new Set,A=new Set;return e.map((function(u){return u.toUpperCase()})).forEach((function(u){return F.add(u)})),Object.keys(t).forEach((function(u){A.add(u.toUpperCase()),F.add(t[u].toUpperCase())})),F.has(C)||A.has(C)}var K=/[^A-Z]/;function W(u){return 3===(u=u.replace(/([a-z])/g,(function(u,D){return D.toUpperCase()}))).length&&!K.test(u)}function Z(u){if(H(u=u.replace(/([A-Z])/g,(function(u,D){return D.toLowerCase()}))))return!0;var D=u.split("-per-");if(2!==D.length)return!1;var e=D[0],t=D[1];return!(!H(e)||!H(t))}function J(u,D,e,t){if(u===D)return D;if(void 0===t)throw new Error("unsignedRoundingMode is mandatory");if("zero"===t)return D;if("infinity"===t)return e;var C=u-D,F=e-u;if(CB[B.length-1])return B[B.length-1].length-1;var o=B.indexOf(a);if(-1===o)return 0;var c=B[o];return"0"===i[c].other?0:c.length-i[c].other.match(/0+/)[0].length}}function ru(u,D,e){var t,C,F,A,E=e;if(0===u)t=X("0",E),C=0,F=0;else{var r=u.toString(),n=r.indexOf("e"),i=r.split("e"),s=i[0],a=i[1],B=s.replace(".","");if(n>=0&&B.length<=E)C=+a,t=B+X("0",E-B.length),F=u;else{var o=(C=Y(u))-E+1,c=Math.round(l(u,o));l(c,E-1)>=10&&(C+=1,c=Math.floor(c/10)),t=c.toString(),F=l(c,E-1-C)}}if(C>=E-1?(t+=X("0",C-E+1),A=C+1):C>=0?(t="".concat(t.slice(0,C+1),".").concat(t.slice(C+1)),A=C+1):(t="0.".concat(X("0",-C-1)).concat(t),A=1),t.indexOf(".")>=0&&e>D){for(var d=e-D;d>0&&"0"===t[t.length-1];)t=t.slice(0,-1),d--;"."===t[t.length-1]&&(t=t.slice(0,-1))}return{formattedString:t,roundedNumber:F,integerDigitsCount:A};function l(u,D){return D<0?u*Math.pow(10,-D):u/Math.pow(10,D)}}function nu(u,D,e){var t,C,F=e,A=Math.round(u*Math.pow(10,F)),E=A/Math.pow(10,F);if(A<1e21)t=A.toString();else{var r=(t=A.toString()).split("e"),n=r[0],i=r[1];t=n.replace(".",""),t+=X("0",Math.max(+i-t.length+1,0))}if(0!==F){var s=t.length;if(s<=F)t=X("0",F+1-s)+t,s=F+1;var a=t.slice(0,s-F),B=t.slice(s-F);t="".concat(a,".").concat(B),C=a.length}else C=t.length;for(var o=e-D;o>0&&"0"===t[t.length-1];)t=t.slice(0,-1),o--;return"."===t[t.length-1]&&(t=t.slice(0,-1)),{formattedString:t,roundedNumber:E,integerDigitsCount:C}}function iu(u,D){var e,t=D<0||n(D,-0);switch(t&&(D=-D),u.roundingType){case"significantDigits":e=ru(D,u.minimumSignificantDigits,u.maximumSignificantDigits);break;case"fractionDigits":e=nu(D,u.minimumFractionDigits,u.maximumFractionDigits);break;default:(e=ru(D,1,2)).integerDigitsCount>1&&(e=nu(D,0,0))}D=e.roundedNumber;var C=e.formattedString,F=e.integerDigitsCount,A=u.minimumIntegerDigits;F\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]/,du=new RegExp("^".concat(cu.source)),lu=new RegExp("".concat(cu.source,"$")),hu=/[#0](?:[\.,][#0]+)*/g;function _u(u,D,e,t){var C,F,A=u.sign,E=u.exponent,r=u.magnitude,n=t.notation,i=t.style,s=t.numberingSystem,a=D.numbers.nu[0],B=null;if("compact"===n&&r&&(B=function(u,D,e,t,C,F,A){var E,r,n=u.roundedNumber,i=u.sign,s=u.magnitude,a=String(Math.pow(10,s)),B=e.numbers.nu[0];if("currency"===t&&"name"!==F){var o=null===(E=((c=e.numbers.currency)[A]||c[B]).short)||void 0===E?void 0:E[a];if(!o)return null;r=gu(D,n,o)}else{var c,d=((c=e.numbers.decimal)[A]||c[B])[C][a];if(!d)return null;r=gu(D,n,d)}if("0"===r)return null;return r=fu(r,i).replace(/([^\s;\-\+\d¤]+)/g,"{c:$1}").replace(/0+/,"0"),r}(u,e,D,i,t.compactDisplay,t.currencyDisplay,s)),"currency"===i&&"name"!==t.currencyDisplay){var o=D.currencies[t.currency];if(o)switch(t.currencyDisplay){case"code":C=t.currency;break;case"symbol":C=o.symbol;break;default:C=o.narrow}else C=t.currency}if(B)F=B;else if("decimal"===i||"unit"===i||"currency"===i&&"name"===t.currencyDisplay)F=fu((D.numbers.decimal[s]||D.numbers.decimal[a]).standard,A);else if("currency"===i){F=fu((d=D.numbers.currency[s]||D.numbers.currency[a])[t.currencySign],A)}else{F=fu(D.numbers.percent[s]||D.numbers.percent[a],A)}var c=hu.exec(F)[0];if(F=F.replace(hu,"{0}").replace(/'(.)'/g,"$1"),"currency"===i&&"name"!==t.currencyDisplay){var d,l=(d=D.numbers.currency[s]||D.numbers.currency[a]).currencySpacing.afterInsertBetween;l&&!lu.test(C)&&(F=F.replace("¤{0}","¤".concat(l,"{0}")));var h=d.currencySpacing.beforeInsertBetween;h&&!du.test(C)&&(F=F.replace("{0}¤","{0}".concat(h,"¤")))}for(var _=F.split(/({c:[^}]+}|\{0\}|[¤%\-\+])/g),p=[],f=D.numbers.symbols[s]||D.numbers.symbols[a],g=0,m=_;g0?(s=r.slice(0,B),a=r.slice(B+1)):s=r,F&&("compact"!==e||n>=1e4)){var o=u.group,c=[],d=A.split(".")[0].split(","),l=3,h=3;d.length>1&&(l=d[d.length-1].length),d.length>2&&(h=d[d.length-2].length);var _=s.length-l;if(_>0){for(c.push(s.slice(_,_+l)),_-=h;_>0;_-=h)c.push(s.slice(_,_+h));c.push(s.slice(0,_+h))}else c.push(s);for(;c.length>0;){var p=c.pop();E.push({type:"integer",value:p}),c.length>0&&E.push({type:"group",value:o})}}else E.push({type:"integer",value:s});if(void 0!==a&&E.push({type:"decimal",value:u.decimal},{type:"fraction",value:a}),("scientific"===e||"engineering"===e)&&isFinite(n)){E.push({type:"exponentSeparator",value:u.exponential}),t<0&&(E.push({type:"exponentMinusSign",value:u.minusSign}),t=-t);var f=nu(t,0,0);E.push({type:"exponentInteger",value:f.formattedString})}return E}function fu(u,D){u.indexOf(";")<0&&(u="".concat(u,";-").concat(u));var e=u.split(";"),t=e[0],C=e[1];switch(D){case 0:return t;case-1:return C;default:return C.indexOf("-")>=0?C.replace(/-/g,"+"):"+".concat(t)}}function gu(u,D,e){return e[u.select(D)]||e.other}function mu(u,D,e){var t,C,F,A=e.getInternalSlots,E=A(u),r=E.pl,i=E.dataLocaleData,s=E.numberingSystem,a=i.numbers.symbols[s]||i.numbers.symbols[i.numbers.nu[0]],B=0,o=0;if(isNaN(D))C=a.nan;else if(D==Number.POSITIVE_INFINITY||D==Number.NEGATIVE_INFINITY)C=a.infinity;else{if(!n(D,-0)){if(!isFinite(D))throw new Error("Input must be a mathematical value");"percent"==E.style&&(D*=100),o=(t=su(u,D,{getInternalSlots:A}))[0],B=t[1],D=o<0?D*Math.pow(10,-o):D/Math.pow(10,o)}var c=iu(E,D);C=c.formattedString,D=c.roundedNumber}switch(E.signDisplay){case"never":F=0;break;case"auto":F=n(D,0)||D>0||isNaN(D)?0:-1;break;case"always":F=n(D,0)||D>0||isNaN(D)?1:-1;break;default:F=0===D||isNaN(D)?0:D>0?1:-1}return _u({roundedNumber:D,formattedString:C,exponent:o,magnitude:B,sign:F},E.dataLocaleData,r,E)}function yu(u,D,e,t){var C=t.getInternalSlots;if(isNaN(D)||isNaN(e))throw new RangeError("Input must be a number");var F=[],A=mu(u,D,{getInternalSlots:C}),E=mu(u,e,{getInternalSlots:C});if(A===E)return Bu(u,A,{getInternalSlots:C});for(var r=0,n=A;rE)throw new RangeError("Invalid range, ".concat(A," > ").concat(E));u.minimumFractionDigits=A,u.maximumFractionDigits=E}else u.minimumFractionDigits=e,u.maximumFractionDigits=t;B||o?u.roundingType="morePrecision"===i?"morePrecision":"lessPrecision"===i?"lessPrecision":s?"significantDigits":"fractionDigits":(u.roundingType="morePrecision",u.minimumFractionDigits=0,u.maximumFractionDigits=0,u.minimumSignificantDigits=1,u.maximumSignificantDigits=2)}function ku(u,D,e){void 0===D&&(D=Object.create(null));var t=(0,e.getInternalSlots)(u),C=U(D,"style","string",["decimal","percent","currency","unit"],"decimal");t.style=C;var F=U(D,"currency","string",void 0,void 0);if(void 0!==F&&!W(F))throw RangeError("Malformed currency code");if("currency"===C&&void 0===F)throw TypeError("currency cannot be undefined");var A=U(D,"currencyDisplay","string",["code","symbol","narrowSymbol","name"],"symbol"),E=U(D,"currencySign","string",["standard","accounting"],"standard"),r=U(D,"unit","string",void 0,void 0);if(void 0!==r&&!Z(r))throw RangeError("Invalid unit argument for Intl.NumberFormat()");if("unit"===C&&void 0===r)throw TypeError("unit cannot be undefined");var n=U(D,"unitDisplay","string",["short","narrow","long"],"short");"currency"===C&&(t.currency=F.toUpperCase(),t.currencyDisplay=A,t.currencySign=E),"unit"===C&&(t.unit=r,t.unitDisplay=n)}var Ru=[1,2,5,10,20,25,50,100,200,250,500,1e3,2e3];function Nu(u,D,e,C){var F=C.getInternalSlots,A=C.localeData,E=C.availableLocales,r=C.numberingSystemNames,n=C.getDefaultLocale,i=C.currencyDigitsData,s=t(D),a=I(e),B=Object.create(null),o=U(a,"localeMatcher","string",["lookup","best fit"],"best fit");B.localeMatcher=o;var c=U(a,"numberingSystem","string",void 0,void 0);if(void 0!==c&&r.indexOf(c)<0)throw RangeError("Invalid numberingSystems: ".concat(c));B.nu=c;var d=(0,xu.ResolveLocale)(Array.from(E),s,B,["nu"],A,n),l=A[d.dataLocale];Au(!!l,"Missing locale data for ".concat(d.dataLocale));var h=F(u);h.locale=d.locale,h.dataLocale=d.dataLocale,h.numberingSystem=d.nu,h.dataLocaleData=l,ku(u,a,{getInternalSlots:F});var _,p,f=h.style;if("currency"===f){var g=au(h.currency,{currencyDigitsData:i});_=g,p=g}else _=0,p="percent"===f?0:3;var m=U(a,"notation","string",["standard","scientific","engineering","compact"],"standard");h.notation=m,Pu(h,a,_,p,m);var y=O(a,"roundingIncrement",1,5e3,1);if(-1===Ru.indexOf(y))throw new RangeError("Invalid rounding increment value: ".concat(y,".\nValid values are ").concat(Ru,"."));if(1!==y&&"fractionDigits"!==h.roundingType)throw new TypeError("For roundingIncrement > 1 only fractionDigits is a valid roundingType");if(1!==y&&h.maximumFractionDigits!==h.minimumFractionDigits)throw new RangeError("With roundingIncrement > 1, maximumFractionDigits and minimumFractionDigits must be equal.");h.roundingIncrement=y;var b=U(a,"trailingZeroDisplay","string",["auto","stripIfInteger"],"auto");h.trailingZeroDisplay=b;var w=U(a,"compactDisplay","string",["short","long"],"short"),v="auto";return"compact"===m&&(h.compactDisplay=w,v="min2"),h.useGrouping=$(a,"useGrouping",["min2","auto","always"],"always",!1,v),h.signDisplay=U(a,"signDisplay","string",["auto","never","always","exceptZero","negative"],"auto"),h.roundingMode=U(a,"roundingMode","string",["ceil","floor","expand","trunc","halfCeil","halfFloor","halfExpand","halfTrunc","halfEven"],"halfExpand"),u}function Iu(u){for(var D=[],e=u.indexOf("{"),t=0,C=0,F=u.length;e-1;)Au((t=u.indexOf("}",e))>e,"Invalid pattern ".concat(u)),e>C&&D.push({type:"literal",value:u.substring(C,e)}),D.push({type:u.substring(e+1,t),value:void 0}),C=t+1,e=u.indexOf("{",C);return C{e.r(D),e.d(D,{LookupSupportedLocales:()=>h,ResolveLocale:()=>l,match:()=>_});var t=e(316),C={supplemental:{languageMatching:{"written-new":[{paradigmLocales:{_locales:"en en_GB es es_419 pt_BR pt_PT"}},{$enUS:{_value:"AS+CA+GU+MH+MP+PH+PR+UM+US+VI"}},{$cnsar:{_value:"HK+MO"}},{$americas:{_value:"019"}},{$maghreb:{_value:"MA+DZ+TN+LY+MR+EH"}},{no:{_desired:"nb",_distance:"1"}},{bs:{_desired:"hr",_distance:"4"}},{bs:{_desired:"sh",_distance:"4"}},{hr:{_desired:"sh",_distance:"4"}},{sr:{_desired:"sh",_distance:"4"}},{aa:{_desired:"ssy",_distance:"4"}},{de:{_desired:"gsw",_distance:"4",_oneway:"true"}},{de:{_desired:"lb",_distance:"4",_oneway:"true"}},{no:{_desired:"da",_distance:"8"}},{nb:{_desired:"da",_distance:"8"}},{ru:{_desired:"ab",_distance:"30",_oneway:"true"}},{en:{_desired:"ach",_distance:"30",_oneway:"true"}},{nl:{_desired:"af",_distance:"20",_oneway:"true"}},{en:{_desired:"ak",_distance:"30",_oneway:"true"}},{en:{_desired:"am",_distance:"30",_oneway:"true"}},{es:{_desired:"ay",_distance:"20",_oneway:"true"}},{ru:{_desired:"az",_distance:"30",_oneway:"true"}},{ur:{_desired:"bal",_distance:"20",_oneway:"true"}},{ru:{_desired:"be",_distance:"20",_oneway:"true"}},{en:{_desired:"bem",_distance:"30",_oneway:"true"}},{hi:{_desired:"bh",_distance:"30",_oneway:"true"}},{en:{_desired:"bn",_distance:"30",_oneway:"true"}},{zh:{_desired:"bo",_distance:"20",_oneway:"true"}},{fr:{_desired:"br",_distance:"20",_oneway:"true"}},{es:{_desired:"ca",_distance:"20",_oneway:"true"}},{fil:{_desired:"ceb",_distance:"30",_oneway:"true"}},{en:{_desired:"chr",_distance:"20",_oneway:"true"}},{ar:{_desired:"ckb",_distance:"30",_oneway:"true"}},{fr:{_desired:"co",_distance:"20",_oneway:"true"}},{fr:{_desired:"crs",_distance:"20",_oneway:"true"}},{sk:{_desired:"cs",_distance:"20"}},{en:{_desired:"cy",_distance:"20",_oneway:"true"}},{en:{_desired:"ee",_distance:"30",_oneway:"true"}},{en:{_desired:"eo",_distance:"30",_oneway:"true"}},{es:{_desired:"eu",_distance:"20",_oneway:"true"}},{da:{_desired:"fo",_distance:"20",_oneway:"true"}},{nl:{_desired:"fy",_distance:"20",_oneway:"true"}},{en:{_desired:"ga",_distance:"20",_oneway:"true"}},{en:{_desired:"gaa",_distance:"30",_oneway:"true"}},{en:{_desired:"gd",_distance:"20",_oneway:"true"}},{es:{_desired:"gl",_distance:"20",_oneway:"true"}},{es:{_desired:"gn",_distance:"20",_oneway:"true"}},{hi:{_desired:"gu",_distance:"30",_oneway:"true"}},{en:{_desired:"ha",_distance:"30",_oneway:"true"}},{en:{_desired:"haw",_distance:"20",_oneway:"true"}},{fr:{_desired:"ht",_distance:"20",_oneway:"true"}},{ru:{_desired:"hy",_distance:"30",_oneway:"true"}},{en:{_desired:"ia",_distance:"30",_oneway:"true"}},{en:{_desired:"ig",_distance:"30",_oneway:"true"}},{en:{_desired:"is",_distance:"20",_oneway:"true"}},{id:{_desired:"jv",_distance:"20",_oneway:"true"}},{en:{_desired:"ka",_distance:"30",_oneway:"true"}},{fr:{_desired:"kg",_distance:"30",_oneway:"true"}},{ru:{_desired:"kk",_distance:"30",_oneway:"true"}},{en:{_desired:"km",_distance:"30",_oneway:"true"}},{en:{_desired:"kn",_distance:"30",_oneway:"true"}},{en:{_desired:"kri",_distance:"30",_oneway:"true"}},{tr:{_desired:"ku",_distance:"30",_oneway:"true"}},{ru:{_desired:"ky",_distance:"30",_oneway:"true"}},{it:{_desired:"la",_distance:"20",_oneway:"true"}},{en:{_desired:"lg",_distance:"30",_oneway:"true"}},{fr:{_desired:"ln",_distance:"30",_oneway:"true"}},{en:{_desired:"lo",_distance:"30",_oneway:"true"}},{en:{_desired:"loz",_distance:"30",_oneway:"true"}},{fr:{_desired:"lua",_distance:"30",_oneway:"true"}},{hi:{_desired:"mai",_distance:"20",_oneway:"true"}},{en:{_desired:"mfe",_distance:"30",_oneway:"true"}},{fr:{_desired:"mg",_distance:"30",_oneway:"true"}},{en:{_desired:"mi",_distance:"20",_oneway:"true"}},{en:{_desired:"ml",_distance:"30",_oneway:"true"}},{ru:{_desired:"mn",_distance:"30",_oneway:"true"}},{hi:{_desired:"mr",_distance:"30",_oneway:"true"}},{id:{_desired:"ms",_distance:"30",_oneway:"true"}},{en:{_desired:"mt",_distance:"30",_oneway:"true"}},{en:{_desired:"my",_distance:"30",_oneway:"true"}},{en:{_desired:"ne",_distance:"30",_oneway:"true"}},{nb:{_desired:"nn",_distance:"20"}},{no:{_desired:"nn",_distance:"20"}},{en:{_desired:"nso",_distance:"30",_oneway:"true"}},{en:{_desired:"ny",_distance:"30",_oneway:"true"}},{en:{_desired:"nyn",_distance:"30",_oneway:"true"}},{fr:{_desired:"oc",_distance:"20",_oneway:"true"}},{en:{_desired:"om",_distance:"30",_oneway:"true"}},{en:{_desired:"or",_distance:"30",_oneway:"true"}},{en:{_desired:"pa",_distance:"30",_oneway:"true"}},{en:{_desired:"pcm",_distance:"20",_oneway:"true"}},{en:{_desired:"ps",_distance:"30",_oneway:"true"}},{es:{_desired:"qu",_distance:"30",_oneway:"true"}},{de:{_desired:"rm",_distance:"20",_oneway:"true"}},{en:{_desired:"rn",_distance:"30",_oneway:"true"}},{fr:{_desired:"rw",_distance:"30",_oneway:"true"}},{hi:{_desired:"sa",_distance:"30",_oneway:"true"}},{en:{_desired:"sd",_distance:"30",_oneway:"true"}},{en:{_desired:"si",_distance:"30",_oneway:"true"}},{en:{_desired:"sn",_distance:"30",_oneway:"true"}},{en:{_desired:"so",_distance:"30",_oneway:"true"}},{en:{_desired:"sq",_distance:"30",_oneway:"true"}},{en:{_desired:"st",_distance:"30",_oneway:"true"}},{id:{_desired:"su",_distance:"20",_oneway:"true"}},{en:{_desired:"sw",_distance:"30",_oneway:"true"}},{en:{_desired:"ta",_distance:"30",_oneway:"true"}},{en:{_desired:"te",_distance:"30",_oneway:"true"}},{ru:{_desired:"tg",_distance:"30",_oneway:"true"}},{en:{_desired:"ti",_distance:"30",_oneway:"true"}},{ru:{_desired:"tk",_distance:"30",_oneway:"true"}},{en:{_desired:"tlh",_distance:"30",_oneway:"true"}},{en:{_desired:"tn",_distance:"30",_oneway:"true"}},{en:{_desired:"to",_distance:"30",_oneway:"true"}},{ru:{_desired:"tt",_distance:"30",_oneway:"true"}},{en:{_desired:"tum",_distance:"30",_oneway:"true"}},{zh:{_desired:"ug",_distance:"20",_oneway:"true"}},{ru:{_desired:"uk",_distance:"20",_oneway:"true"}},{en:{_desired:"ur",_distance:"30",_oneway:"true"}},{ru:{_desired:"uz",_distance:"30",_oneway:"true"}},{fr:{_desired:"wo",_distance:"30",_oneway:"true"}},{en:{_desired:"xh",_distance:"30",_oneway:"true"}},{en:{_desired:"yi",_distance:"30",_oneway:"true"}},{en:{_desired:"yo",_distance:"30",_oneway:"true"}},{zh:{_desired:"za",_distance:"20",_oneway:"true"}},{en:{_desired:"zu",_distance:"30",_oneway:"true"}},{ar:{_desired:"aao",_distance:"10",_oneway:"true"}},{ar:{_desired:"abh",_distance:"10",_oneway:"true"}},{ar:{_desired:"abv",_distance:"10",_oneway:"true"}},{ar:{_desired:"acm",_distance:"10",_oneway:"true"}},{ar:{_desired:"acq",_distance:"10",_oneway:"true"}},{ar:{_desired:"acw",_distance:"10",_oneway:"true"}},{ar:{_desired:"acx",_distance:"10",_oneway:"true"}},{ar:{_desired:"acy",_distance:"10",_oneway:"true"}},{ar:{_desired:"adf",_distance:"10",_oneway:"true"}},{ar:{_desired:"aeb",_distance:"10",_oneway:"true"}},{ar:{_desired:"aec",_distance:"10",_oneway:"true"}},{ar:{_desired:"afb",_distance:"10",_oneway:"true"}},{ar:{_desired:"ajp",_distance:"10",_oneway:"true"}},{ar:{_desired:"apc",_distance:"10",_oneway:"true"}},{ar:{_desired:"apd",_distance:"10",_oneway:"true"}},{ar:{_desired:"arq",_distance:"10",_oneway:"true"}},{ar:{_desired:"ars",_distance:"10",_oneway:"true"}},{ar:{_desired:"ary",_distance:"10",_oneway:"true"}},{ar:{_desired:"arz",_distance:"10",_oneway:"true"}},{ar:{_desired:"auz",_distance:"10",_oneway:"true"}},{ar:{_desired:"avl",_distance:"10",_oneway:"true"}},{ar:{_desired:"ayh",_distance:"10",_oneway:"true"}},{ar:{_desired:"ayl",_distance:"10",_oneway:"true"}},{ar:{_desired:"ayn",_distance:"10",_oneway:"true"}},{ar:{_desired:"ayp",_distance:"10",_oneway:"true"}},{ar:{_desired:"bbz",_distance:"10",_oneway:"true"}},{ar:{_desired:"pga",_distance:"10",_oneway:"true"}},{ar:{_desired:"shu",_distance:"10",_oneway:"true"}},{ar:{_desired:"ssh",_distance:"10",_oneway:"true"}},{az:{_desired:"azb",_distance:"10",_oneway:"true"}},{et:{_desired:"vro",_distance:"10",_oneway:"true"}},{ff:{_desired:"ffm",_distance:"10",_oneway:"true"}},{ff:{_desired:"fub",_distance:"10",_oneway:"true"}},{ff:{_desired:"fue",_distance:"10",_oneway:"true"}},{ff:{_desired:"fuf",_distance:"10",_oneway:"true"}},{ff:{_desired:"fuh",_distance:"10",_oneway:"true"}},{ff:{_desired:"fui",_distance:"10",_oneway:"true"}},{ff:{_desired:"fuq",_distance:"10",_oneway:"true"}},{ff:{_desired:"fuv",_distance:"10",_oneway:"true"}},{gn:{_desired:"gnw",_distance:"10",_oneway:"true"}},{gn:{_desired:"gui",_distance:"10",_oneway:"true"}},{gn:{_desired:"gun",_distance:"10",_oneway:"true"}},{gn:{_desired:"nhd",_distance:"10",_oneway:"true"}},{iu:{_desired:"ikt",_distance:"10",_oneway:"true"}},{kln:{_desired:"enb",_distance:"10",_oneway:"true"}},{kln:{_desired:"eyo",_distance:"10",_oneway:"true"}},{kln:{_desired:"niq",_distance:"10",_oneway:"true"}},{kln:{_desired:"oki",_distance:"10",_oneway:"true"}},{kln:{_desired:"pko",_distance:"10",_oneway:"true"}},{kln:{_desired:"sgc",_distance:"10",_oneway:"true"}},{kln:{_desired:"tec",_distance:"10",_oneway:"true"}},{kln:{_desired:"tuy",_distance:"10",_oneway:"true"}},{kok:{_desired:"gom",_distance:"10",_oneway:"true"}},{kpe:{_desired:"gkp",_distance:"10",_oneway:"true"}},{luy:{_desired:"ida",_distance:"10",_oneway:"true"}},{luy:{_desired:"lkb",_distance:"10",_oneway:"true"}},{luy:{_desired:"lko",_distance:"10",_oneway:"true"}},{luy:{_desired:"lks",_distance:"10",_oneway:"true"}},{luy:{_desired:"lri",_distance:"10",_oneway:"true"}},{luy:{_desired:"lrm",_distance:"10",_oneway:"true"}},{luy:{_desired:"lsm",_distance:"10",_oneway:"true"}},{luy:{_desired:"lto",_distance:"10",_oneway:"true"}},{luy:{_desired:"lts",_distance:"10",_oneway:"true"}},{luy:{_desired:"lwg",_distance:"10",_oneway:"true"}},{luy:{_desired:"nle",_distance:"10",_oneway:"true"}},{luy:{_desired:"nyd",_distance:"10",_oneway:"true"}},{luy:{_desired:"rag",_distance:"10",_oneway:"true"}},{lv:{_desired:"ltg",_distance:"10",_oneway:"true"}},{mg:{_desired:"bhr",_distance:"10",_oneway:"true"}},{mg:{_desired:"bjq",_distance:"10",_oneway:"true"}},{mg:{_desired:"bmm",_distance:"10",_oneway:"true"}},{mg:{_desired:"bzc",_distance:"10",_oneway:"true"}},{mg:{_desired:"msh",_distance:"10",_oneway:"true"}},{mg:{_desired:"skg",_distance:"10",_oneway:"true"}},{mg:{_desired:"tdx",_distance:"10",_oneway:"true"}},{mg:{_desired:"tkg",_distance:"10",_oneway:"true"}},{mg:{_desired:"txy",_distance:"10",_oneway:"true"}},{mg:{_desired:"xmv",_distance:"10",_oneway:"true"}},{mg:{_desired:"xmw",_distance:"10",_oneway:"true"}},{mn:{_desired:"mvf",_distance:"10",_oneway:"true"}},{ms:{_desired:"bjn",_distance:"10",_oneway:"true"}},{ms:{_desired:"btj",_distance:"10",_oneway:"true"}},{ms:{_desired:"bve",_distance:"10",_oneway:"true"}},{ms:{_desired:"bvu",_distance:"10",_oneway:"true"}},{ms:{_desired:"coa",_distance:"10",_oneway:"true"}},{ms:{_desired:"dup",_distance:"10",_oneway:"true"}},{ms:{_desired:"hji",_distance:"10",_oneway:"true"}},{ms:{_desired:"id",_distance:"10",_oneway:"true"}},{ms:{_desired:"jak",_distance:"10",_oneway:"true"}},{ms:{_desired:"jax",_distance:"10",_oneway:"true"}},{ms:{_desired:"kvb",_distance:"10",_oneway:"true"}},{ms:{_desired:"kvr",_distance:"10",_oneway:"true"}},{ms:{_desired:"kxd",_distance:"10",_oneway:"true"}},{ms:{_desired:"lce",_distance:"10",_oneway:"true"}},{ms:{_desired:"lcf",_distance:"10",_oneway:"true"}},{ms:{_desired:"liw",_distance:"10",_oneway:"true"}},{ms:{_desired:"max",_distance:"10",_oneway:"true"}},{ms:{_desired:"meo",_distance:"10",_oneway:"true"}},{ms:{_desired:"mfa",_distance:"10",_oneway:"true"}},{ms:{_desired:"mfb",_distance:"10",_oneway:"true"}},{ms:{_desired:"min",_distance:"10",_oneway:"true"}},{ms:{_desired:"mqg",_distance:"10",_oneway:"true"}},{ms:{_desired:"msi",_distance:"10",_oneway:"true"}},{ms:{_desired:"mui",_distance:"10",_oneway:"true"}},{ms:{_desired:"orn",_distance:"10",_oneway:"true"}},{ms:{_desired:"ors",_distance:"10",_oneway:"true"}},{ms:{_desired:"pel",_distance:"10",_oneway:"true"}},{ms:{_desired:"pse",_distance:"10",_oneway:"true"}},{ms:{_desired:"tmw",_distance:"10",_oneway:"true"}},{ms:{_desired:"urk",_distance:"10",_oneway:"true"}},{ms:{_desired:"vkk",_distance:"10",_oneway:"true"}},{ms:{_desired:"vkt",_distance:"10",_oneway:"true"}},{ms:{_desired:"xmm",_distance:"10",_oneway:"true"}},{ms:{_desired:"zlm",_distance:"10",_oneway:"true"}},{ms:{_desired:"zmi",_distance:"10",_oneway:"true"}},{ne:{_desired:"dty",_distance:"10",_oneway:"true"}},{om:{_desired:"gax",_distance:"10",_oneway:"true"}},{om:{_desired:"hae",_distance:"10",_oneway:"true"}},{om:{_desired:"orc",_distance:"10",_oneway:"true"}},{or:{_desired:"spv",_distance:"10",_oneway:"true"}},{ps:{_desired:"pbt",_distance:"10",_oneway:"true"}},{ps:{_desired:"pst",_distance:"10",_oneway:"true"}},{qu:{_desired:"qub",_distance:"10",_oneway:"true"}},{qu:{_desired:"qud",_distance:"10",_oneway:"true"}},{qu:{_desired:"quf",_distance:"10",_oneway:"true"}},{qu:{_desired:"qug",_distance:"10",_oneway:"true"}},{qu:{_desired:"quh",_distance:"10",_oneway:"true"}},{qu:{_desired:"quk",_distance:"10",_oneway:"true"}},{qu:{_desired:"qul",_distance:"10",_oneway:"true"}},{qu:{_desired:"qup",_distance:"10",_oneway:"true"}},{qu:{_desired:"qur",_distance:"10",_oneway:"true"}},{qu:{_desired:"qus",_distance:"10",_oneway:"true"}},{qu:{_desired:"quw",_distance:"10",_oneway:"true"}},{qu:{_desired:"qux",_distance:"10",_oneway:"true"}},{qu:{_desired:"quy",_distance:"10",_oneway:"true"}},{qu:{_desired:"qva",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvc",_distance:"10",_oneway:"true"}},{qu:{_desired:"qve",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvh",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvi",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvj",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvl",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvm",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvn",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvo",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvp",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvs",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvw",_distance:"10",_oneway:"true"}},{qu:{_desired:"qvz",_distance:"10",_oneway:"true"}},{qu:{_desired:"qwa",_distance:"10",_oneway:"true"}},{qu:{_desired:"qwc",_distance:"10",_oneway:"true"}},{qu:{_desired:"qwh",_distance:"10",_oneway:"true"}},{qu:{_desired:"qws",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxa",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxc",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxh",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxl",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxn",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxo",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxp",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxr",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxt",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxu",_distance:"10",_oneway:"true"}},{qu:{_desired:"qxw",_distance:"10",_oneway:"true"}},{sc:{_desired:"sdc",_distance:"10",_oneway:"true"}},{sc:{_desired:"sdn",_distance:"10",_oneway:"true"}},{sc:{_desired:"sro",_distance:"10",_oneway:"true"}},{sq:{_desired:"aae",_distance:"10",_oneway:"true"}},{sq:{_desired:"aat",_distance:"10",_oneway:"true"}},{sq:{_desired:"aln",_distance:"10",_oneway:"true"}},{syr:{_desired:"aii",_distance:"10",_oneway:"true"}},{uz:{_desired:"uzs",_distance:"10",_oneway:"true"}},{yi:{_desired:"yih",_distance:"10",_oneway:"true"}},{zh:{_desired:"cdo",_distance:"10",_oneway:"true"}},{zh:{_desired:"cjy",_distance:"10",_oneway:"true"}},{zh:{_desired:"cpx",_distance:"10",_oneway:"true"}},{zh:{_desired:"czh",_distance:"10",_oneway:"true"}},{zh:{_desired:"czo",_distance:"10",_oneway:"true"}},{zh:{_desired:"gan",_distance:"10",_oneway:"true"}},{zh:{_desired:"hak",_distance:"10",_oneway:"true"}},{zh:{_desired:"hsn",_distance:"10",_oneway:"true"}},{zh:{_desired:"lzh",_distance:"10",_oneway:"true"}},{zh:{_desired:"mnp",_distance:"10",_oneway:"true"}},{zh:{_desired:"nan",_distance:"10",_oneway:"true"}},{zh:{_desired:"wuu",_distance:"10",_oneway:"true"}},{zh:{_desired:"yue",_distance:"10",_oneway:"true"}},{"*":{_desired:"*",_distance:"80"}},{"en-Latn":{_desired:"am-Ethi",_distance:"10",_oneway:"true"}},{"ru-Cyrl":{_desired:"az-Latn",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"bn-Beng",_distance:"10",_oneway:"true"}},{"zh-Hans":{_desired:"bo-Tibt",_distance:"10",_oneway:"true"}},{"ru-Cyrl":{_desired:"hy-Armn",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"ka-Geor",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"km-Khmr",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"kn-Knda",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"lo-Laoo",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"ml-Mlym",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"my-Mymr",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"ne-Deva",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"or-Orya",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"pa-Guru",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"ps-Arab",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"sd-Arab",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"si-Sinh",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"ta-Taml",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"te-Telu",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"ti-Ethi",_distance:"10",_oneway:"true"}},{"ru-Cyrl":{_desired:"tk-Latn",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"ur-Arab",_distance:"10",_oneway:"true"}},{"ru-Cyrl":{_desired:"uz-Latn",_distance:"10",_oneway:"true"}},{"en-Latn":{_desired:"yi-Hebr",_distance:"10",_oneway:"true"}},{"sr-Cyrl":{_desired:"sr-Latn",_distance:"5"}},{"zh-Hans":{_desired:"za-Latn",_distance:"10",_oneway:"true"}},{"zh-Hans":{_desired:"zh-Hani",_distance:"20",_oneway:"true"}},{"zh-Hant":{_desired:"zh-Hani",_distance:"20",_oneway:"true"}},{"ar-Arab":{_desired:"ar-Latn",_distance:"20",_oneway:"true"}},{"bn-Beng":{_desired:"bn-Latn",_distance:"20",_oneway:"true"}},{"gu-Gujr":{_desired:"gu-Latn",_distance:"20",_oneway:"true"}},{"hi-Deva":{_desired:"hi-Latn",_distance:"20",_oneway:"true"}},{"kn-Knda":{_desired:"kn-Latn",_distance:"20",_oneway:"true"}},{"ml-Mlym":{_desired:"ml-Latn",_distance:"20",_oneway:"true"}},{"mr-Deva":{_desired:"mr-Latn",_distance:"20",_oneway:"true"}},{"ta-Taml":{_desired:"ta-Latn",_distance:"20",_oneway:"true"}},{"te-Telu":{_desired:"te-Latn",_distance:"20",_oneway:"true"}},{"zh-Hans":{_desired:"zh-Latn",_distance:"20",_oneway:"true"}},{"ja-Jpan":{_desired:"ja-Latn",_distance:"5",_oneway:"true"}},{"ja-Jpan":{_desired:"ja-Hani",_distance:"5",_oneway:"true"}},{"ja-Jpan":{_desired:"ja-Hira",_distance:"5",_oneway:"true"}},{"ja-Jpan":{_desired:"ja-Kana",_distance:"5",_oneway:"true"}},{"ja-Jpan":{_desired:"ja-Hrkt",_distance:"5",_oneway:"true"}},{"ja-Hrkt":{_desired:"ja-Hira",_distance:"5",_oneway:"true"}},{"ja-Hrkt":{_desired:"ja-Kana",_distance:"5",_oneway:"true"}},{"ko-Kore":{_desired:"ko-Hani",_distance:"5",_oneway:"true"}},{"ko-Kore":{_desired:"ko-Hang",_distance:"5",_oneway:"true"}},{"ko-Kore":{_desired:"ko-Jamo",_distance:"5",_oneway:"true"}},{"ko-Hang":{_desired:"ko-Jamo",_distance:"5",_oneway:"true"}},{"*-*":{_desired:"*-*",_distance:"50"}},{"ar-*-$maghreb":{_desired:"ar-*-$maghreb",_distance:"4"}},{"ar-*-$!maghreb":{_desired:"ar-*-$!maghreb",_distance:"4"}},{"ar-*-*":{_desired:"ar-*-*",_distance:"5"}},{"en-*-$enUS":{_desired:"en-*-$enUS",_distance:"4"}},{"en-*-GB":{_desired:"en-*-$!enUS",_distance:"3"}},{"en-*-$!enUS":{_desired:"en-*-$!enUS",_distance:"4"}},{"en-*-*":{_desired:"en-*-*",_distance:"5"}},{"es-*-$americas":{_desired:"es-*-$americas",_distance:"4"}},{"es-*-$!americas":{_desired:"es-*-$!americas",_distance:"4"}},{"es-*-*":{_desired:"es-*-*",_distance:"5"}},{"pt-*-$americas":{_desired:"pt-*-$americas",_distance:"4"}},{"pt-*-$!americas":{_desired:"pt-*-$!americas",_distance:"4"}},{"pt-*-*":{_desired:"pt-*-*",_distance:"5"}},{"zh-Hant-$cnsar":{_desired:"zh-Hant-$cnsar",_distance:"4"}},{"zh-Hant-$!cnsar":{_desired:"zh-Hant-$!cnsar",_distance:"4"}},{"zh-Hant-*":{_desired:"zh-Hant-*",_distance:"5"}},{"*-*-*":{_desired:"*-*-*",_distance:"4"}}]}}},F={"001":["001","001-status-grouping","002","005","009","011","013","014","015","017","018","019","021","029","030","034","035","039","053","054","057","061","142","143","145","150","151","154","155","AC","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CP","CQ","CR","CU","CV","CW","CX","CY","CZ","DE","DG","DJ","DK","DM","DO","DZ","EA","EC","EE","EG","EH","ER","ES","ET","EU","EZ","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","IC","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","QO","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TA","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","UN","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW"],"002":["002","002-status-grouping","011","014","015","017","018","202","AO","BF","BI","BJ","BW","CD","CF","CG","CI","CM","CV","DJ","DZ","EA","EG","EH","ER","ET","GA","GH","GM","GN","GQ","GW","IC","IO","KE","KM","LR","LS","LY","MA","MG","ML","MR","MU","MW","MZ","NA","NE","NG","RE","RW","SC","SD","SH","SL","SN","SO","SS","ST","SZ","TD","TF","TG","TN","TZ","UG","YT","ZA","ZM","ZW"],"003":["003","013","021","029","AG","AI","AW","BB","BL","BM","BQ","BS","BZ","CA","CR","CU","CW","DM","DO","GD","GL","GP","GT","HN","HT","JM","KN","KY","LC","MF","MQ","MS","MX","NI","PA","PM","PR","SV","SX","TC","TT","US","VC","VG","VI"],"005":["005","AR","BO","BR","BV","CL","CO","EC","FK","GF","GS","GY","PE","PY","SR","UY","VE"],"009":["009","053","054","057","061","AC","AQ","AS","AU","CC","CK","CP","CX","DG","FJ","FM","GU","HM","KI","MH","MP","NC","NF","NR","NU","NZ","PF","PG","PN","PW","QO","SB","TA","TK","TO","TV","UM","VU","WF","WS"],"011":["011","BF","BJ","CI","CV","GH","GM","GN","GW","LR","ML","MR","NE","NG","SH","SL","SN","TG"],"013":["013","BZ","CR","GT","HN","MX","NI","PA","SV"],"014":["014","BI","DJ","ER","ET","IO","KE","KM","MG","MU","MW","MZ","RE","RW","SC","SO","SS","TF","TZ","UG","YT","ZM","ZW"],"015":["015","DZ","EA","EG","EH","IC","LY","MA","SD","TN"],"017":["017","AO","CD","CF","CG","CM","GA","GQ","ST","TD"],"018":["018","BW","LS","NA","SZ","ZA"],"019":["003","005","013","019","019-status-grouping","021","029","419","AG","AI","AR","AW","BB","BL","BM","BO","BQ","BR","BS","BV","BZ","CA","CL","CO","CR","CU","CW","DM","DO","EC","FK","GD","GF","GL","GP","GS","GT","GY","HN","HT","JM","KN","KY","LC","MF","MQ","MS","MX","NI","PA","PE","PM","PR","PY","SR","SV","SX","TC","TT","US","UY","VC","VE","VG","VI"],"021":["021","BM","CA","GL","PM","US"],"029":["029","AG","AI","AW","BB","BL","BQ","BS","CU","CW","DM","DO","GD","GP","HT","JM","KN","KY","LC","MF","MQ","MS","PR","SX","TC","TT","VC","VG","VI"],"030":["030","CN","HK","JP","KP","KR","MN","MO","TW"],"034":["034","AF","BD","BT","IN","IR","LK","MV","NP","PK"],"035":["035","BN","ID","KH","LA","MM","MY","PH","SG","TH","TL","VN"],"039":["039","AD","AL","BA","ES","GI","GR","HR","IT","ME","MK","MT","PT","RS","SI","SM","VA","XK"],"053":["053","AU","CC","CX","HM","NF","NZ"],"054":["054","FJ","NC","PG","SB","VU"],"057":["057","FM","GU","KI","MH","MP","NR","PW","UM"],"061":["061","AS","CK","NU","PF","PN","TK","TO","TV","WF","WS"],142:["030","034","035","142","143","145","AE","AF","AM","AZ","BD","BH","BN","BT","CN","CY","GE","HK","ID","IL","IN","IQ","IR","JO","JP","KG","KH","KP","KR","KW","KZ","LA","LB","LK","MM","MN","MO","MV","MY","NP","OM","PH","PK","PS","QA","SA","SG","SY","TH","TJ","TL","TM","TR","TW","UZ","VN","YE"],143:["143","KG","KZ","TJ","TM","UZ"],145:["145","AE","AM","AZ","BH","CY","GE","IL","IQ","JO","KW","LB","OM","PS","QA","SA","SY","TR","YE"],150:["039","150","151","154","155","AD","AL","AT","AX","BA","BE","BG","BY","CH","CQ","CZ","DE","DK","EE","ES","FI","FO","FR","GB","GG","GI","GR","HR","HU","IE","IM","IS","IT","JE","LI","LT","LU","LV","MC","MD","ME","MK","MT","NL","NO","PL","PT","RO","RS","RU","SE","SI","SJ","SK","SM","UA","VA","XK"],151:["151","BG","BY","CZ","HU","MD","PL","RO","RU","SK","UA"],154:["154","AX","CQ","DK","EE","FI","FO","GB","GG","IE","IM","IS","JE","LT","LV","NO","SE","SJ"],155:["155","AT","BE","CH","DE","FR","LI","LU","MC","NL"],202:["011","014","017","018","202","AO","BF","BI","BJ","BW","CD","CF","CG","CI","CM","CV","DJ","ER","ET","GA","GH","GM","GN","GQ","GW","IO","KE","KM","LR","LS","MG","ML","MR","MU","MW","MZ","NA","NE","NG","RE","RW","SC","SH","SL","SN","SO","SS","ST","SZ","TD","TF","TG","TZ","UG","YT","ZA","ZM","ZW"],419:["005","013","029","419","AG","AI","AR","AW","BB","BL","BO","BQ","BR","BS","BV","BZ","CL","CO","CR","CU","CW","DM","DO","EC","FK","GD","GF","GP","GS","GT","GY","HN","HT","JM","KN","KY","LC","MF","MQ","MS","MX","NI","PA","PE","PR","PY","SR","SV","SX","TC","TT","UY","VC","VE","VG","VI"],EU:["AT","BE","BG","CY","CZ","DE","DK","EE","ES","EU","FI","FR","GR","HR","HU","IE","IT","LT","LU","LV","MT","NL","PL","PT","RO","SE","SI","SK"],EZ:["AT","BE","CY","DE","EE","ES","EZ","FI","FR","GR","IE","IT","LT","LU","LV","MT","NL","PT","SI","SK"],QO:["AC","AQ","CP","DG","QO","TA"],UN:["AD","AE","AF","AG","AL","AM","AO","AR","AT","AU","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BN","BO","BR","BS","BT","BW","BY","BZ","CA","CD","CF","CG","CH","CI","CL","CM","CN","CO","CR","CU","CV","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","ER","ES","ET","FI","FJ","FM","FR","GA","GB","GD","GE","GH","GM","GN","GQ","GR","GT","GW","GY","HN","HR","HT","HU","ID","IE","IL","IN","IQ","IR","IS","IT","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MG","MH","MK","ML","MM","MN","MR","MT","MU","MV","MW","MX","MY","MZ","NA","NE","NG","NI","NL","NO","NP","NR","NZ","OM","PA","PE","PG","PH","PK","PL","PT","PW","PY","QA","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SI","SK","SL","SM","SN","SO","SR","SS","ST","SV","SY","SZ","TD","TG","TH","TJ","TL","TM","TN","TO","TR","TT","TV","TZ","UA","UG","UN","US","UY","UZ","VC","VE","VN","VU","WS","YE","ZA","ZM","ZW"]},A=/-u(?:-[0-9a-z]{2,8})+/gi;function E(u,D,e){if(void 0===e&&(e=Error),!u)throw new e(D)}var r,n=838;function i(u,D,e){var C=D.split("-"),A=C[0],E=C[1],r=C[2],n=!0;if(r&&"$"===r[0]){var i="!"!==r[1],s=(i?e[r.slice(1)]:e[r.slice(2)]).map((function(u){return F[u]||[u]})).reduce((function(u,D){return(0,t.__spreadArray)((0,t.__spreadArray)([],u,!0),D,!0)}),[]);n&&(n=!(s.indexOf(u.region||"")>1!=i))}else n&&(n=!u.region||("*"===r||r===u.region));return n&&(n=!u.script||("*"===E||E===u.script)),n&&(n=!u.language||("*"===A||A===u.language)),n}function s(u){return[u.language,u.script,u.region].filter(Boolean).join("-")}function a(u,D,e){for(var t=0,C=e.matches;t-1!=e.paradigmLocales.indexOf(s(D))>-1?E-1:E}}throw new Error("No matching distance found")}function B(u,D){var e=new Intl.Locale(u).maximize(),F=new Intl.Locale(D).maximize(),A={language:e.language,script:e.script||"",region:e.region||""},E={language:F.language,script:F.script||"",region:F.region||""},n=0,i=function(){var u,D;if(!r){var e=null===(D=null===(u=C.supplemental.languageMatching["written-new"][0])||void 0===u?void 0:u.paradigmLocales)||void 0===D?void 0:D._locales.split(" "),F=C.supplemental.languageMatching["written-new"].slice(1,5),A=C.supplemental.languageMatching["written-new"].slice(5).map((function(u){var D=Object.keys(u)[0],e=u[D];return{supported:D,desired:e._desired,distance:+e._distance,oneway:"true"===e.oneway}}),{});r={matches:A,matchVariables:F.reduce((function(u,D){var e=Object.keys(D)[0],t=D[e];return u[e.slice(1)]=t._value.split("+"),u}),{}),paradigmLocales:(0,t.__spreadArray)((0,t.__spreadArray)([],e,!0),e.map((function(u){return new Intl.Locale(u.replace(/_/g,"-")).maximize().toString()})),!0)}}return r}();return A.language!==E.language&&(n+=a({language:e.language,script:"",region:""},{language:F.language,script:"",region:""},i)),A.script!==E.script&&(n+=a({language:e.language,script:A.script,region:""},{language:F.language,script:A.script,region:""},i)),A.region!==E.region&&(n+=a(A,E,i)),n}function o(u,D,e){var t,C,F=[],E=D.reduce((function(u,D){var e=D.replace(A,"");return F.push(e),u[e]=D,u}),{}),r=function(u,D,e){void 0===e&&(e=n);var t=1/0,C={matchedDesiredLocale:"",distances:{}};return u.forEach((function(u,e){C.distances[u]||(C.distances[u]={}),D.forEach((function(D){var F=B(u,D)+0+40*e;C.distances[u][D]=F,F=e&&(C.matchedDesiredLocale=void 0,C.matchedSupportedLocale=void 0),C}(F,u);return r.matchedSupportedLocale&&r.matchedDesiredLocale&&(t=r.matchedSupportedLocale,C=E[r.matchedDesiredLocale].slice(r.matchedDesiredLocale.length)||void 0),t?{locale:t,extension:C}:{locale:e()}}function c(u,D){for(var e=D;;){if(u.indexOf(e)>-1)return e;var t=e.lastIndexOf("-");if(!~t)return;t>=2&&"-"===e[t-2]&&(t-=2),e=e.slice(0,t)}}function d(u,D){E(2===D.length,"key must have 2 elements");var e=u.length,t="-".concat(D,"-"),C=u.indexOf(t);if(-1!==C){for(var F=C+4,A=F,r=F,n=!1;!n;){var i=u.indexOf("-",r);2===(-1===i?e-r:i-r)?n=!0:-1===i?(A=e,n=!0):(A=i,r=i+1)}return u.slice(F,A)}if(t="-".concat(D),-1!==(C=u.indexOf(t))&&C+3===e)return""}function l(u,D,e,t,C,F){var r;r="lookup"===e.localeMatcher?function(u,D,e){for(var t={locale:""},C=0,F=D;C2){var y=n.indexOf("-x-");if(-1===y)n+=s;else{var b=n.slice(0,y),w=n.slice(y,n.length);n=b+s+w}n=Intl.getCanonicalLocales(n)[0]}return i.locale=n,i}function h(u,D){for(var e=[],t=0,C=D;t{var t=e(256);(0,e(740).shouldPolyfill)()&&Object.defineProperty(Intl,"Segmenter",{value:t.Segmenter,enumerable:!1,writable:!0,configurable:!0})},740:(u,D)=>{Object.defineProperty(D,"__esModule",{value:!0}),D.shouldPolyfill=void 0,D.shouldPolyfill=function(){return!Intl.Segmenter}},984:(u,D)=>{Object.defineProperty(D,"__esModule",{value:!0}),D.SegmentationRules=void 0,D.SegmentationRules={de:{sentence:{segmentRules:{},suppressions:["Port.","Alt.","Di.","Ges.","frz.","entspr.","Gebr.","erw.","Frl.","Inh.","k.u.k.","Ca.","J.D.","Ausg.","evtl.","So.","i.B.","s.a.","kgl.","Sept.","o.B.","Sa.","ev.","Dez.","am.","i.R.","eigtl.","i.J.","u.U.","G.","z.Hd.","u.A.w.g.","Kl.","Spezif.","Obj.","Ing.","D. h.","Folg.","Akt.","i.A.","Msp.","U.U.","Chr.","R.","Einh.","schwäb.","Vgl.","Aug.","Dipl.-Ing.","W.","B.","U. U.","J.","Fa.","Mo.","n.u.Z.","Op.","Mrd.","e.h.","Hr.","Hrn.","Ztr.","k. u. k.","Bibl.","d.Ä.","b.","M.","i.H.","v.R.w.","o.A.","St.","Dr.","Fn.","Abs.","Rd.","Dtzd.","Jahrh.","Z.","Std.","n. Chr.","möbl.","tägl.","gest.","gesch.","z.B.","Hbf.","Abt.","A.M.","e.Wz.","v.T.","Nov.","z.","Prot.","U.S.","Wg.","u.v.a.","Adr.","App.","ggf.","ggfs.","Jan.","O.","Rel.","od.","Pfd.","a.a.O.","p.Adr.","P.","Gem.","v. Chr.","Art.","z.Z.","S.A.","i.V.","verh.","Ausschl.","m.W.","Dir.","Verf.","Sek.","r.","Chin.","Feb.","Int.","Sep.","Gesch.","schweiz.","Bed.","a.Rh.","jew.","vgl.","a.M.","Str.","exkl.","gek.","Erf.","u.Ä.","ehem.","näml.","u. Z.","v. u. Z.","sog.","C.","Dipl.-Kfm.","mtl.","Hrsg.","Qu.","röm.","u.","U.","Adj.","Kap.","hpts.","a.D.","gedr.","Best.","N.","v.u.Z.","Phys.","Fr.","d.J.","Reg.-Bez.","m.E.","schles.","Max.","Ltd.","südd.","inkl.","geb.","Ggf.","Inc.","kath.","kfm.","Nr.","Proz.","Dim.","verw.","Reg.","Dat.","Evtl.","led.","F.","Test.","Schr.","Do.","PIN.","Z. Zt.","v.Chr.","Tägl.","s.","amtl.","Temp.","Mind.","e.V.","Abw.","P.M.","F.f.","a.a.S.","Mod.","Co.","Min.","Allg.","Geograph.","Jr.","Urspr.","Apr.","Z. B.","v.H.","A.","einschl.","Trans.","zzgl.","StR.","Fam.","I.","jhrl.","u.a.","Ben.","o.g.","Kfm.","Konv.","Mi.","L.","beil.","T.","Ursprüngl.","röm.-kath.","Okt.","u.ä.","Tel.","D.","Ber.","Kop.","Mio.","Y.","U.S.A.","v. H.","Forts. f.","Rep.","Hptst.","österr."],variables:{}}},el:{sentence:{segmentRules:{},suppressions:[],variables:{$STerm:"((?:[!;\\?\\u037E\\u0589\\u061D-\\u061F\\u06D4\\u0700-\\u0702\\u07F9\\u0837\\u0839\\u083D\\u083E\\u0964\\u0965\\u104A\\u104B\\u1362\\u1367\\u1368\\u166E\\u1735\\u1736\\u1803\\u1809\\u1944\\u1945\\u1AA8-\\u1AAB\\u1B5A\\u1B5B\\u1B5E\\u1B5F\\u1B7D\\u1B7E\\u1C3B\\u1C3C\\u1C7E\\u1C7F\\u203C\\u203D\\u2047-\\u2049\\u2E2E\\u2E3C\\u2E53\\u2E54\\u3002\\uA4FF\\uA60E\\uA60F\\uA6F3\\uA6F7\\uA876\\uA877\\uA8CE\\uA8CF\\uA92F\\uA9C8\\uA9C9\\uAA5D-\\uAA5F\\uAAF0\\uAAF1\\uABEB\\uFE56\\uFE57\\uFF01\\uFF1F\\uFF61]|\\uD802[\\uDE56\\uDE57]|\\uD803[\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47\\uDC48\\uDCBE-\\uDCC1\\uDD41-\\uDD43\\uDDC5\\uDDC6\\uDDCD\\uDDDE\\uDDDF\\uDE38\\uDE39\\uDE3B\\uDE3C\\uDEA9]|\\uD805[\\uDC4B\\uDC4C\\uDDC2\\uDDC3\\uDDC9-\\uDDD7\\uDE41\\uDE42\\uDF3C-\\uDF3E]|\\uD806[\\uDD44\\uDD46\\uDE42\\uDE43\\uDE9B\\uDE9C]|\\uD807[\\uDC41\\uDC42\\uDEF7\\uDEF8\\uDF43\\uDF44]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37\\uDF38\\uDF44]|\\uD81B\\uDE98|\\uD82F\\uDC9F|\\uD836\\uDE88)(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)"}}},en:{sentence:{segmentRules:{},suppressions:["L.P.","Alt.","Approx.","E.G.","O.","Maj.","Misc.","P.O.","J.D.","Jam.","Card.","Dec.","Sept.","MR.","Long.","Hat.","G.","Link.","DC.","D.C.","M.T.","Hz.","Mrs.","By.","Act.","Var.","N.V.","Aug.","B.","S.A.","Up.","Job.","Num.","M.I.T.","Ok.","Org.","Ex.","Cont.","U.","Mart.","Fn.","Abs.","Lt.","OK.","Z.","E.","Kb.","Est.","A.M.","L.A.","Prof.","U.S.","Nov.","Ph.D.","Mar.","I.T.","exec.","Jan.","N.Y.","X.","Md.","Op.","vs.","D.A.","A.D.","R.L.","P.M.","Or.","M.R.","Cap.","PC.","Feb.","Exec.","I.e.","Sep.","Gb.","K.","U.S.C.","Mt.","S.","A.S.","C.O.D.","Capt.","Col.","In.","C.F.","Adj.","AD.","I.D.","Mgr.","R.T.","B.V.","M.","Conn.","Yr.","Rev.","Phys.","pp.","Ms.","To.","Sgt.","J.K.","Nr.","Jun.","Fri.","S.A.R.","Lev.","Lt.Cdr.","Def.","F.","Do.","Joe.","Id.","Mr.","Dept.","Is.","Pvt.","Diff.","Hon.B.A.","Q.","Mb.","On.","Min.","J.B.","Ed.","AB.","A.","S.p.A.","I.","a.m.","Comm.","Go.","VS.","L.","All.","PP.","P.V.","T.","K.R.","Etc.","D.","Adv.","Lib.","E.g.","Pro.","U.S.A.","S.E.","AA.","Rep.","Sq.","As."],variables:{}}},es:{sentence:{segmentRules:{},suppressions:["Rdos.","JJ.OO.","Sres.","fig.","may.","RR.HH.","oct.","cap.","mié.","doc.","Excmo.","Trab.","Excmos.","Kit.","Inc.","FF.CC.","DC.","ago.","trad.","SA.","Rvdos.","ed.","Exmo.","jul.","col.","RAM.","Srtas.","ene.","Rol.","Fabric.","Comm.","vid.","Da.","dic.","ss.","abr.","ntra.","Sra.","dtor.","cf.","dom.","prov.","Emm.","Sr.","licdo.","p.ej.","bol.","figs.","Vda.","Dr.","ntro.","Desv.","O.M.","Ldo.","Drs.","sáb.","feb.","Ltda.","Lcda.","Exma.","C.V.","SS.MM.","Lda.","U.S.","hnos.","R.D.","Korn.","v.gr.","vs.","Ilmas.","Rdo.","ej.","vie.","jue.","a. C.","Ilmos.","e. c.","Excma.","afma.","licda.","Em.","K.","sras.","MM.","fund.","Mons.","Lcdo.","afmo.","C.","A.C.","dptos.","Col.","Srta.","Av.","Ant.","depto.","Var.","H.P.","D.","M.","C.P.","Rev.","Rvdmos.","Fr.","Ilmo.","afmos.","Ltd.","afmas.","prof.","lun.","SS.AA.","Sol.","nov.","mss.","Dña.","Seg.","mar.","Rvdmo.","Reg.","ms.","Sras.","sres.","U.S.A.","Sta.","Sdad.","Dra.","srs.","R.U.","deptos.","dpto.","jun.","bco.","Cía.","Id.","Mr.","e.g.","C.S.","Excmas.","Dª.","Rvdo.","Lic.","cfr.","Corp.","Dto.","Ilma.","L.","All.","PP.","d. C.","Ltdo.","mtro.","Mrs.","Desc.","Avda.","Exmas.","a. e. c.","Bien.","Exmos.","AA.","Sto.","CA.","sept.","Exc.","c/c."],variables:{}}},fr:{sentence:{segmentRules:{},suppressions:["aux.","config.","collab.","M.","dim.","imprim.","oct.","syst.","bull.","MM.","doc.","P.O.","hôp.","Mart.","juil.","broch.","adr.","symb.","C.","anc.","voit.","Jr.","graph.","dir.","éd.","fig.","édit.","niv.","quart.","cam.","éval.","anon.","réf.","Comm.","Prof.","févr.","indus.","DC.","équiv.","illustr.","acoust.","nov.","L.","All.","U.S.","S.M.A.R.T.","sept.","avr.","jeu.","dest.","P.-D. G.","ill.","coll.","encycl.","mer.","Desc.","ven.","P.","lun.","Inc.","sam.","D.","append.","Var.","categ.","janv.","S.A.","imm.","U.S.A.","mar.","exempl.","déc.","ann.","U.","synth.","dict.","av. J.-C.","W.","Op.","ap. J.-C.","gouv.","trav. publ."],variables:{}}},it:{sentence:{segmentRules:{},suppressions:["N.B.","div.","a.C.","fig.","d.p.R.","c.c.p.","Cfr.","vol.","Geom.","O.d.G.","S.p.A.","ver.","N.d.A.","dott.","arch.","d.C.","N.d.T.","rag.","Sig.","Mod.","pag.","dr.","tav.","N.d.E.","DC.","mitt.","Ing.","int.","on.","C.P.","ag.","L.","U.S.","S.M.A.R.T.","p.i.","tab.","Ltd.","Liv.","D.","U.S.A.","sez.","avv.","S.A.R.","all.","p."],variables:{}}},ja:{word:{segmentRules:{13.3:{after:"$Hiragana",before:"$Hiragana",breaks:!1},13.4:{after:"$Ideographic",before:"$Ideographic",breaks:!1}},suppressions:[],variables:{$Hiragana:"((?:[\\u3041-\\u3096\\u309D-\\u309F]|\\uD82C[\\uDC01-\\uDD1F\\uDD32\\uDD50-\\uDD52]|\\uD83C\\uDE00)(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$Ideographic:"((?:[\\u3005-\\u3007\\u3021-\\u3029\\u3038-\\u303B\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFA6D\\uFA70-\\uFAD9]|\\uD81B\\uDFE4|[\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883\\uD885-\\uD887][\\uDC00-\\uDFFF]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDD70-\\uDEFB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF39\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A\\uDF50-\\uDFFF]|\\uD888[\\uDC00-\\uDFAF])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)"}}},pt:{sentence:{segmentRules:{},suppressions:["psicol.","fig.","compl.","rep.","cap.","doc.","fisiol.","dipl.","astron.","port.","eletrôn.","geom.","mov.","ago.","trad.","arquit.","dez.","ed.","apt.","Exmo.","col.","ff.","univ.","res.","R.","transp.","D.C","l.","des.","fev.","abr.","liter.","lat.","Dir.","cf.","adm.","fot.","p.m.","P.M.","créd.","jur.","com.","anat.","dir.","end.","fís.","E.","Est.","cont.","matem.","Drs.","gên.","neol.","pág.","índ.","Ltda.","Exma.","esp.","ingl.","tecnol.","Mar.","símb.","Pe.","pal.","filos.","V.T.","fasc.","vs.","mai.","S.A.","profa.","N.Sra.","r.s.v.p.","cel.","mat.","abrev.","out.","long.","aux.","arit.","aer.","jul.","lin.","S.","méd.","odontol.","org.","A.C.","jun.","déb.","Av.","álg.","sup.","fl.","odont.","caps.","relat.","organiz.","hist.","Fr.","Ilmo.","fem.","ap.","Ltd.","pol.","séc.","prof.","cx.","nov.","quím.","mús.","agric.","mar.","W.C.","fr.","cat.","jan.","pron.","rel.","autom.","Sta.","Dra.","p.","tel.","div.","p. ex.","a.C.","bras.","Alm.","Dr.","comp.","pq.","arqueol.","náut.","biogr.","f.","círc.","fac.","d.C.","apart.","ex.","Jr.","set.","tec.","sociol.","gram.","ind.","Ilma.","vol.","eng.","rod.","Ph.D.","Dras.","pp.","elem.","máq.","cód.","eletr.","prod.","ref.","fil.","a.m.","A.M","obs.","N.T.","contab.","Sto.","lit.","educ.","rementente","desc.","próx."],variables:{}}},root:{grapheme:{segmentRules:{11:{after:"$ExtPict",before:"$ExtPict$Extend*$ZWJ",breaks:!1},12:{after:"$RI",before:"^($RI$RI)*$RI",breaks:!1},13:{after:"$RI",before:"[^\\uDDE6-\\uDDFF]($RI$RI)*$RI",breaks:!1},3:{after:"$LF",before:"$CR",breaks:!1},4:{before:"($Control|$CR|$LF)",breaks:!0},5:{after:"($Control|$CR|$LF)",breaks:!0},6:{after:"($L|$V|$LV|$LVT)",before:"$L",breaks:!1},7:{after:"($V|$T)",before:"($LV|$V)",breaks:!1},8:{after:"$T",before:"($LVT|$T)",breaks:!1},9:{after:"($Extend|$ZWJ)",breaks:!1},9.1:{after:"$SpacingMark",breaks:!1},9.2:{before:"$Prepend",breaks:!1},9.3:{after:"$LinkingConsonant",before:"$LinkingConsonant$ExtCccZwj*$Virama$ExtCccZwj*",breaks:!1}},suppressions:[],variables:{$CR:"\\r",$Control:"(?:[\\0-\\t\\x0B\\f\\x0E-\\x1F\\x7F-\\x9F\\xAD\\u061C\\u180E\\u200B\\u200E\\u200F\\u2028-\\u202E\\u2060-\\u206F\\uFEFF\\uFFF0-\\uFFFB]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC00-\\uDC1F\\uDC80-\\uDCFF\\uDDF0-\\uDFFF]|[\\uDB41-\\uDB43][\\uDC00-\\uDFFF])",$ExtCccZwj:"(?:[\\u0300-\\u034E\\u0350-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u08FF\\u093C\\u094D\\u0951-\\u0954\\u09BC\\u09CD\\u09FE\\u0A3C\\u0A4D\\u0ABC\\u0ACD\\u0B3C\\u0B4D\\u0BCD\\u0C3C\\u0C4D\\u0C55\\u0C56\\u0CBC\\u0CCD\\u0D3B\\u0D3C\\u0D4D\\u0DCA\\u0E38-\\u0E3A\\u0E48-\\u0E4B\\u0EB8-\\u0EBA\\u0EC8-\\u0ECB\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71\\u0F72\\u0F74\\u0F7A-\\u0F7D\\u0F80\\u0F82-\\u0F84\\u0F86\\u0F87\\u0FC6\\u1037\\u1039\\u103A\\u108D\\u135D-\\u135F\\u1714\\u17D2\\u17DD\\u18A9\\u1939-\\u193B\\u1A17\\u1A18\\u1A60\\u1A75-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1ABF-\\u1ACE\\u1B34\\u1B6B-\\u1B73\\u1BAB\\u1BE6\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DFF\\u200D\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA806\\uA82C\\uA8C4\\uA8E0-\\uA8F1\\uA92B-\\uA92D\\uA9B3\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAF6\\uABED\\uFB1E\\uFE20-\\uFE2F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE0D\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC46\\uDC70\\uDC7F\\uDCB9\\uDCBA\\uDD00-\\uDD02\\uDD33\\uDD34\\uDD73\\uDDCA\\uDE36\\uDEE9\\uDEEA\\uDF3B\\uDF3C\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC42\\uDC46\\uDC5E\\uDCC2\\uDCC3\\uDDBF\\uDDC0\\uDE3F\\uDEB7\\uDF2B]|\\uD806[\\uDC39\\uDC3A\\uDD3E\\uDD43\\uDDE0\\uDE34\\uDE47\\uDE99]|\\uD807[\\uDC3F\\uDD42\\uDD44\\uDD45\\uDD97\\uDF42]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD82F\\uDC9E|\\uD834[\\uDD65\\uDD67-\\uDD69\\uDD6E-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A])",$ExtPict:"(?:[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u2388\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2605\\u2607-\\u2612\\u2614-\\u2685\\u2690-\\u2705\\u2708-\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2767\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC00-\\uDCFF\\uDD0D-\\uDD0F\\uDD2F\\uDD6C-\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDAD-\\uDDE5\\uDE01-\\uDE0F\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE3C-\\uDE3F\\uDE49-\\uDFFA]|\\uD83D[\\uDC00-\\uDD3D\\uDD46-\\uDE4F\\uDE80-\\uDEFF\\uDF74-\\uDF7F\\uDFD5-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE-\\uDCFF\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDEFF]|\\uD83F[\\uDC00-\\uDFFD])",$Extend:"(?:[\\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\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962\\u0963\\u0981\\u09BC\\u09BE\\u09C1-\\u09C4\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01\\u0B3C\\u0B3E\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE\\u0BC0\\u0BCD\\u0BD7\\u0C00\\u0C04\\u0C3C\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC2\\u0CC6\\u0CCC\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D00\\u0D01\\u0D3B\\u0D3C\\u0D3E\\u0D41-\\u0D44\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81\\u0DCA\\u0DCF\\u0DD2-\\u0DD4\\u0DD6\\u0DDF\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732\\u1733\\u1752\\u1753\\u1772\\u1773\\u17B4\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B03\\u1B34-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA82C\\uA8C4\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9BD\\uA9E5\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEC\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFF9E\\uFF9F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC01\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC81\\uDCB3-\\uDCB6\\uDCB9\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD2B\\uDD2D-\\uDD34\\uDD73\\uDD80\\uDD81\\uDDB6-\\uDDBE\\uDDC9-\\uDDCC\\uDDCF\\uDE2F-\\uDE31\\uDE34\\uDE36\\uDE37\\uDE3E\\uDE41\\uDEDF\\uDEE3-\\uDEEA\\uDF00\\uDF01\\uDF3B\\uDF3C\\uDF3E\\uDF40\\uDF57\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC38-\\uDC3F\\uDC42-\\uDC44\\uDC46\\uDC5E\\uDCB0\\uDCB3-\\uDCB8\\uDCBA\\uDCBD\\uDCBF\\uDCC0\\uDCC2\\uDCC3\\uDDAF\\uDDB2-\\uDDB5\\uDDBC\\uDDBD\\uDDBF\\uDDC0\\uDDDC\\uDDDD\\uDE33-\\uDE3A\\uDE3D\\uDE3F\\uDE40\\uDEAB\\uDEAD\\uDEB0-\\uDEB5\\uDEB7\\uDF1D-\\uDF1F\\uDF22-\\uDF25\\uDF27-\\uDF2B]|\\uD806[\\uDC2F-\\uDC37\\uDC39\\uDC3A\\uDD30\\uDD3B\\uDD3C\\uDD3E\\uDD43\\uDDD4-\\uDDD7\\uDDDA\\uDDDB\\uDDE0\\uDE01-\\uDE0A\\uDE33-\\uDE38\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE56\\uDE59-\\uDE5B\\uDE8A-\\uDE96\\uDE98\\uDE99]|\\uD807[\\uDC30-\\uDC36\\uDC38-\\uDC3D\\uDC3F\\uDC92-\\uDCA7\\uDCAA-\\uDCB0\\uDCB2\\uDCB3\\uDCB5\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD90\\uDD91\\uDD95\\uDD97\\uDEF3\\uDEF4\\uDF00\\uDF01\\uDF36-\\uDF3A\\uDF40\\uDF42]|\\uD80D[\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF8F-\\uDF92\\uDFE4]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65\\uDD67-\\uDD69\\uDD6E-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC20-\\uDC7F\\uDD00-\\uDDEF])",$L:"[\\u1100-\\u115F\\uA960-\\uA97C]",$LF:"\\n",$LV:"[\\uAC00\\uAC1C\\uAC38\\uAC54\\uAC70\\uAC8C\\uACA8\\uACC4\\uACE0\\uACFC\\uAD18\\uAD34\\uAD50\\uAD6C\\uAD88\\uADA4\\uADC0\\uADDC\\uADF8\\uAE14\\uAE30\\uAE4C\\uAE68\\uAE84\\uAEA0\\uAEBC\\uAED8\\uAEF4\\uAF10\\uAF2C\\uAF48\\uAF64\\uAF80\\uAF9C\\uAFB8\\uAFD4\\uAFF0\\uB00C\\uB028\\uB044\\uB060\\uB07C\\uB098\\uB0B4\\uB0D0\\uB0EC\\uB108\\uB124\\uB140\\uB15C\\uB178\\uB194\\uB1B0\\uB1CC\\uB1E8\\uB204\\uB220\\uB23C\\uB258\\uB274\\uB290\\uB2AC\\uB2C8\\uB2E4\\uB300\\uB31C\\uB338\\uB354\\uB370\\uB38C\\uB3A8\\uB3C4\\uB3E0\\uB3FC\\uB418\\uB434\\uB450\\uB46C\\uB488\\uB4A4\\uB4C0\\uB4DC\\uB4F8\\uB514\\uB530\\uB54C\\uB568\\uB584\\uB5A0\\uB5BC\\uB5D8\\uB5F4\\uB610\\uB62C\\uB648\\uB664\\uB680\\uB69C\\uB6B8\\uB6D4\\uB6F0\\uB70C\\uB728\\uB744\\uB760\\uB77C\\uB798\\uB7B4\\uB7D0\\uB7EC\\uB808\\uB824\\uB840\\uB85C\\uB878\\uB894\\uB8B0\\uB8CC\\uB8E8\\uB904\\uB920\\uB93C\\uB958\\uB974\\uB990\\uB9AC\\uB9C8\\uB9E4\\uBA00\\uBA1C\\uBA38\\uBA54\\uBA70\\uBA8C\\uBAA8\\uBAC4\\uBAE0\\uBAFC\\uBB18\\uBB34\\uBB50\\uBB6C\\uBB88\\uBBA4\\uBBC0\\uBBDC\\uBBF8\\uBC14\\uBC30\\uBC4C\\uBC68\\uBC84\\uBCA0\\uBCBC\\uBCD8\\uBCF4\\uBD10\\uBD2C\\uBD48\\uBD64\\uBD80\\uBD9C\\uBDB8\\uBDD4\\uBDF0\\uBE0C\\uBE28\\uBE44\\uBE60\\uBE7C\\uBE98\\uBEB4\\uBED0\\uBEEC\\uBF08\\uBF24\\uBF40\\uBF5C\\uBF78\\uBF94\\uBFB0\\uBFCC\\uBFE8\\uC004\\uC020\\uC03C\\uC058\\uC074\\uC090\\uC0AC\\uC0C8\\uC0E4\\uC100\\uC11C\\uC138\\uC154\\uC170\\uC18C\\uC1A8\\uC1C4\\uC1E0\\uC1FC\\uC218\\uC234\\uC250\\uC26C\\uC288\\uC2A4\\uC2C0\\uC2DC\\uC2F8\\uC314\\uC330\\uC34C\\uC368\\uC384\\uC3A0\\uC3BC\\uC3D8\\uC3F4\\uC410\\uC42C\\uC448\\uC464\\uC480\\uC49C\\uC4B8\\uC4D4\\uC4F0\\uC50C\\uC528\\uC544\\uC560\\uC57C\\uC598\\uC5B4\\uC5D0\\uC5EC\\uC608\\uC624\\uC640\\uC65C\\uC678\\uC694\\uC6B0\\uC6CC\\uC6E8\\uC704\\uC720\\uC73C\\uC758\\uC774\\uC790\\uC7AC\\uC7C8\\uC7E4\\uC800\\uC81C\\uC838\\uC854\\uC870\\uC88C\\uC8A8\\uC8C4\\uC8E0\\uC8FC\\uC918\\uC934\\uC950\\uC96C\\uC988\\uC9A4\\uC9C0\\uC9DC\\uC9F8\\uCA14\\uCA30\\uCA4C\\uCA68\\uCA84\\uCAA0\\uCABC\\uCAD8\\uCAF4\\uCB10\\uCB2C\\uCB48\\uCB64\\uCB80\\uCB9C\\uCBB8\\uCBD4\\uCBF0\\uCC0C\\uCC28\\uCC44\\uCC60\\uCC7C\\uCC98\\uCCB4\\uCCD0\\uCCEC\\uCD08\\uCD24\\uCD40\\uCD5C\\uCD78\\uCD94\\uCDB0\\uCDCC\\uCDE8\\uCE04\\uCE20\\uCE3C\\uCE58\\uCE74\\uCE90\\uCEAC\\uCEC8\\uCEE4\\uCF00\\uCF1C\\uCF38\\uCF54\\uCF70\\uCF8C\\uCFA8\\uCFC4\\uCFE0\\uCFFC\\uD018\\uD034\\uD050\\uD06C\\uD088\\uD0A4\\uD0C0\\uD0DC\\uD0F8\\uD114\\uD130\\uD14C\\uD168\\uD184\\uD1A0\\uD1BC\\uD1D8\\uD1F4\\uD210\\uD22C\\uD248\\uD264\\uD280\\uD29C\\uD2B8\\uD2D4\\uD2F0\\uD30C\\uD328\\uD344\\uD360\\uD37C\\uD398\\uD3B4\\uD3D0\\uD3EC\\uD408\\uD424\\uD440\\uD45C\\uD478\\uD494\\uD4B0\\uD4CC\\uD4E8\\uD504\\uD520\\uD53C\\uD558\\uD574\\uD590\\uD5AC\\uD5C8\\uD5E4\\uD600\\uD61C\\uD638\\uD654\\uD670\\uD68C\\uD6A8\\uD6C4\\uD6E0\\uD6FC\\uD718\\uD734\\uD750\\uD76C\\uD788]",$LVT:"[\\uAC01-\\uAC1B\\uAC1D-\\uAC37\\uAC39-\\uAC53\\uAC55-\\uAC6F\\uAC71-\\uAC8B\\uAC8D-\\uACA7\\uACA9-\\uACC3\\uACC5-\\uACDF\\uACE1-\\uACFB\\uACFD-\\uAD17\\uAD19-\\uAD33\\uAD35-\\uAD4F\\uAD51-\\uAD6B\\uAD6D-\\uAD87\\uAD89-\\uADA3\\uADA5-\\uADBF\\uADC1-\\uADDB\\uADDD-\\uADF7\\uADF9-\\uAE13\\uAE15-\\uAE2F\\uAE31-\\uAE4B\\uAE4D-\\uAE67\\uAE69-\\uAE83\\uAE85-\\uAE9F\\uAEA1-\\uAEBB\\uAEBD-\\uAED7\\uAED9-\\uAEF3\\uAEF5-\\uAF0F\\uAF11-\\uAF2B\\uAF2D-\\uAF47\\uAF49-\\uAF63\\uAF65-\\uAF7F\\uAF81-\\uAF9B\\uAF9D-\\uAFB7\\uAFB9-\\uAFD3\\uAFD5-\\uAFEF\\uAFF1-\\uB00B\\uB00D-\\uB027\\uB029-\\uB043\\uB045-\\uB05F\\uB061-\\uB07B\\uB07D-\\uB097\\uB099-\\uB0B3\\uB0B5-\\uB0CF\\uB0D1-\\uB0EB\\uB0ED-\\uB107\\uB109-\\uB123\\uB125-\\uB13F\\uB141-\\uB15B\\uB15D-\\uB177\\uB179-\\uB193\\uB195-\\uB1AF\\uB1B1-\\uB1CB\\uB1CD-\\uB1E7\\uB1E9-\\uB203\\uB205-\\uB21F\\uB221-\\uB23B\\uB23D-\\uB257\\uB259-\\uB273\\uB275-\\uB28F\\uB291-\\uB2AB\\uB2AD-\\uB2C7\\uB2C9-\\uB2E3\\uB2E5-\\uB2FF\\uB301-\\uB31B\\uB31D-\\uB337\\uB339-\\uB353\\uB355-\\uB36F\\uB371-\\uB38B\\uB38D-\\uB3A7\\uB3A9-\\uB3C3\\uB3C5-\\uB3DF\\uB3E1-\\uB3FB\\uB3FD-\\uB417\\uB419-\\uB433\\uB435-\\uB44F\\uB451-\\uB46B\\uB46D-\\uB487\\uB489-\\uB4A3\\uB4A5-\\uB4BF\\uB4C1-\\uB4DB\\uB4DD-\\uB4F7\\uB4F9-\\uB513\\uB515-\\uB52F\\uB531-\\uB54B\\uB54D-\\uB567\\uB569-\\uB583\\uB585-\\uB59F\\uB5A1-\\uB5BB\\uB5BD-\\uB5D7\\uB5D9-\\uB5F3\\uB5F5-\\uB60F\\uB611-\\uB62B\\uB62D-\\uB647\\uB649-\\uB663\\uB665-\\uB67F\\uB681-\\uB69B\\uB69D-\\uB6B7\\uB6B9-\\uB6D3\\uB6D5-\\uB6EF\\uB6F1-\\uB70B\\uB70D-\\uB727\\uB729-\\uB743\\uB745-\\uB75F\\uB761-\\uB77B\\uB77D-\\uB797\\uB799-\\uB7B3\\uB7B5-\\uB7CF\\uB7D1-\\uB7EB\\uB7ED-\\uB807\\uB809-\\uB823\\uB825-\\uB83F\\uB841-\\uB85B\\uB85D-\\uB877\\uB879-\\uB893\\uB895-\\uB8AF\\uB8B1-\\uB8CB\\uB8CD-\\uB8E7\\uB8E9-\\uB903\\uB905-\\uB91F\\uB921-\\uB93B\\uB93D-\\uB957\\uB959-\\uB973\\uB975-\\uB98F\\uB991-\\uB9AB\\uB9AD-\\uB9C7\\uB9C9-\\uB9E3\\uB9E5-\\uB9FF\\uBA01-\\uBA1B\\uBA1D-\\uBA37\\uBA39-\\uBA53\\uBA55-\\uBA6F\\uBA71-\\uBA8B\\uBA8D-\\uBAA7\\uBAA9-\\uBAC3\\uBAC5-\\uBADF\\uBAE1-\\uBAFB\\uBAFD-\\uBB17\\uBB19-\\uBB33\\uBB35-\\uBB4F\\uBB51-\\uBB6B\\uBB6D-\\uBB87\\uBB89-\\uBBA3\\uBBA5-\\uBBBF\\uBBC1-\\uBBDB\\uBBDD-\\uBBF7\\uBBF9-\\uBC13\\uBC15-\\uBC2F\\uBC31-\\uBC4B\\uBC4D-\\uBC67\\uBC69-\\uBC83\\uBC85-\\uBC9F\\uBCA1-\\uBCBB\\uBCBD-\\uBCD7\\uBCD9-\\uBCF3\\uBCF5-\\uBD0F\\uBD11-\\uBD2B\\uBD2D-\\uBD47\\uBD49-\\uBD63\\uBD65-\\uBD7F\\uBD81-\\uBD9B\\uBD9D-\\uBDB7\\uBDB9-\\uBDD3\\uBDD5-\\uBDEF\\uBDF1-\\uBE0B\\uBE0D-\\uBE27\\uBE29-\\uBE43\\uBE45-\\uBE5F\\uBE61-\\uBE7B\\uBE7D-\\uBE97\\uBE99-\\uBEB3\\uBEB5-\\uBECF\\uBED1-\\uBEEB\\uBEED-\\uBF07\\uBF09-\\uBF23\\uBF25-\\uBF3F\\uBF41-\\uBF5B\\uBF5D-\\uBF77\\uBF79-\\uBF93\\uBF95-\\uBFAF\\uBFB1-\\uBFCB\\uBFCD-\\uBFE7\\uBFE9-\\uC003\\uC005-\\uC01F\\uC021-\\uC03B\\uC03D-\\uC057\\uC059-\\uC073\\uC075-\\uC08F\\uC091-\\uC0AB\\uC0AD-\\uC0C7\\uC0C9-\\uC0E3\\uC0E5-\\uC0FF\\uC101-\\uC11B\\uC11D-\\uC137\\uC139-\\uC153\\uC155-\\uC16F\\uC171-\\uC18B\\uC18D-\\uC1A7\\uC1A9-\\uC1C3\\uC1C5-\\uC1DF\\uC1E1-\\uC1FB\\uC1FD-\\uC217\\uC219-\\uC233\\uC235-\\uC24F\\uC251-\\uC26B\\uC26D-\\uC287\\uC289-\\uC2A3\\uC2A5-\\uC2BF\\uC2C1-\\uC2DB\\uC2DD-\\uC2F7\\uC2F9-\\uC313\\uC315-\\uC32F\\uC331-\\uC34B\\uC34D-\\uC367\\uC369-\\uC383\\uC385-\\uC39F\\uC3A1-\\uC3BB\\uC3BD-\\uC3D7\\uC3D9-\\uC3F3\\uC3F5-\\uC40F\\uC411-\\uC42B\\uC42D-\\uC447\\uC449-\\uC463\\uC465-\\uC47F\\uC481-\\uC49B\\uC49D-\\uC4B7\\uC4B9-\\uC4D3\\uC4D5-\\uC4EF\\uC4F1-\\uC50B\\uC50D-\\uC527\\uC529-\\uC543\\uC545-\\uC55F\\uC561-\\uC57B\\uC57D-\\uC597\\uC599-\\uC5B3\\uC5B5-\\uC5CF\\uC5D1-\\uC5EB\\uC5ED-\\uC607\\uC609-\\uC623\\uC625-\\uC63F\\uC641-\\uC65B\\uC65D-\\uC677\\uC679-\\uC693\\uC695-\\uC6AF\\uC6B1-\\uC6CB\\uC6CD-\\uC6E7\\uC6E9-\\uC703\\uC705-\\uC71F\\uC721-\\uC73B\\uC73D-\\uC757\\uC759-\\uC773\\uC775-\\uC78F\\uC791-\\uC7AB\\uC7AD-\\uC7C7\\uC7C9-\\uC7E3\\uC7E5-\\uC7FF\\uC801-\\uC81B\\uC81D-\\uC837\\uC839-\\uC853\\uC855-\\uC86F\\uC871-\\uC88B\\uC88D-\\uC8A7\\uC8A9-\\uC8C3\\uC8C5-\\uC8DF\\uC8E1-\\uC8FB\\uC8FD-\\uC917\\uC919-\\uC933\\uC935-\\uC94F\\uC951-\\uC96B\\uC96D-\\uC987\\uC989-\\uC9A3\\uC9A5-\\uC9BF\\uC9C1-\\uC9DB\\uC9DD-\\uC9F7\\uC9F9-\\uCA13\\uCA15-\\uCA2F\\uCA31-\\uCA4B\\uCA4D-\\uCA67\\uCA69-\\uCA83\\uCA85-\\uCA9F\\uCAA1-\\uCABB\\uCABD-\\uCAD7\\uCAD9-\\uCAF3\\uCAF5-\\uCB0F\\uCB11-\\uCB2B\\uCB2D-\\uCB47\\uCB49-\\uCB63\\uCB65-\\uCB7F\\uCB81-\\uCB9B\\uCB9D-\\uCBB7\\uCBB9-\\uCBD3\\uCBD5-\\uCBEF\\uCBF1-\\uCC0B\\uCC0D-\\uCC27\\uCC29-\\uCC43\\uCC45-\\uCC5F\\uCC61-\\uCC7B\\uCC7D-\\uCC97\\uCC99-\\uCCB3\\uCCB5-\\uCCCF\\uCCD1-\\uCCEB\\uCCED-\\uCD07\\uCD09-\\uCD23\\uCD25-\\uCD3F\\uCD41-\\uCD5B\\uCD5D-\\uCD77\\uCD79-\\uCD93\\uCD95-\\uCDAF\\uCDB1-\\uCDCB\\uCDCD-\\uCDE7\\uCDE9-\\uCE03\\uCE05-\\uCE1F\\uCE21-\\uCE3B\\uCE3D-\\uCE57\\uCE59-\\uCE73\\uCE75-\\uCE8F\\uCE91-\\uCEAB\\uCEAD-\\uCEC7\\uCEC9-\\uCEE3\\uCEE5-\\uCEFF\\uCF01-\\uCF1B\\uCF1D-\\uCF37\\uCF39-\\uCF53\\uCF55-\\uCF6F\\uCF71-\\uCF8B\\uCF8D-\\uCFA7\\uCFA9-\\uCFC3\\uCFC5-\\uCFDF\\uCFE1-\\uCFFB\\uCFFD-\\uD017\\uD019-\\uD033\\uD035-\\uD04F\\uD051-\\uD06B\\uD06D-\\uD087\\uD089-\\uD0A3\\uD0A5-\\uD0BF\\uD0C1-\\uD0DB\\uD0DD-\\uD0F7\\uD0F9-\\uD113\\uD115-\\uD12F\\uD131-\\uD14B\\uD14D-\\uD167\\uD169-\\uD183\\uD185-\\uD19F\\uD1A1-\\uD1BB\\uD1BD-\\uD1D7\\uD1D9-\\uD1F3\\uD1F5-\\uD20F\\uD211-\\uD22B\\uD22D-\\uD247\\uD249-\\uD263\\uD265-\\uD27F\\uD281-\\uD29B\\uD29D-\\uD2B7\\uD2B9-\\uD2D3\\uD2D5-\\uD2EF\\uD2F1-\\uD30B\\uD30D-\\uD327\\uD329-\\uD343\\uD345-\\uD35F\\uD361-\\uD37B\\uD37D-\\uD397\\uD399-\\uD3B3\\uD3B5-\\uD3CF\\uD3D1-\\uD3EB\\uD3ED-\\uD407\\uD409-\\uD423\\uD425-\\uD43F\\uD441-\\uD45B\\uD45D-\\uD477\\uD479-\\uD493\\uD495-\\uD4AF\\uD4B1-\\uD4CB\\uD4CD-\\uD4E7\\uD4E9-\\uD503\\uD505-\\uD51F\\uD521-\\uD53B\\uD53D-\\uD557\\uD559-\\uD573\\uD575-\\uD58F\\uD591-\\uD5AB\\uD5AD-\\uD5C7\\uD5C9-\\uD5E3\\uD5E5-\\uD5FF\\uD601-\\uD61B\\uD61D-\\uD637\\uD639-\\uD653\\uD655-\\uD66F\\uD671-\\uD68B\\uD68D-\\uD6A7\\uD6A9-\\uD6C3\\uD6C5-\\uD6DF\\uD6E1-\\uD6FB\\uD6FD-\\uD717\\uD719-\\uD733\\uD735-\\uD74F\\uD751-\\uD76B\\uD76D-\\uD787\\uD789-\\uD7A3]",$LinkingConsonant:"[\\u0915-\\u0939\\u0958-\\u095F\\u0978-\\u097F\\u0995-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09DC\\u09DD\\u09DF\\u09F0\\u09F1\\u0A95-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0AF9\\u0B15-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B5C\\u0B5D\\u0B5F\\u0B71\\u0C15-\\u0C28\\u0C2A-\\u0C39\\u0C58-\\u0C5A\\u0D15-\\u0D3A]",$Prepend:"(?:[\\u0600-\\u0605\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u0D4E]|\\uD804[\\uDCBD\\uDCCD\\uDDC2\\uDDC3]|\\uD806[\\uDD3F\\uDD41\\uDE3A\\uDE84-\\uDE89]|\\uD807[\\uDD46\\uDF02])",$RI:"(?:\\uD83C[\\uDDE6-\\uDDFF])",$SpacingMark:"(?:[\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u094F\\u0982\\u0983\\u09BF\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0\\u0CC1\\u0CC3\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CF3\\u0D02\\u0D03\\u0D3F\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D82\\u0D83\\u0DD0\\u0DD1\\u0DD8-\\u0DDE\\u0DF2\\u0DF3\\u0E33\\u0EB3\\u0F3E\\u0F3F\\u0F7F\\u1031\\u103B\\u103C\\u1056\\u1057\\u1084\\u1715\\u1734\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u1A19\\u1A1A\\u1A55\\u1A57\\u1A6D-\\u1A72\\u1B04\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2\\u1BF3\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF7\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BE-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAAEB\\uAAEE\\uAAEF\\uAAF5\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]|\\uD804[\\uDC00\\uDC02\\uDC82\\uDCB0-\\uDCB2\\uDCB7\\uDCB8\\uDD2C\\uDD45\\uDD46\\uDD82\\uDDB3-\\uDDB5\\uDDBF\\uDDC0\\uDDCE\\uDE2C-\\uDE2E\\uDE32\\uDE33\\uDE35\\uDEE0-\\uDEE2\\uDF02\\uDF03\\uDF3F\\uDF41-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF62\\uDF63]|\\uD805[\\uDC35-\\uDC37\\uDC40\\uDC41\\uDC45\\uDCB1\\uDCB2\\uDCB9\\uDCBB\\uDCBC\\uDCBE\\uDCC1\\uDDB0\\uDDB1\\uDDB8-\\uDDBB\\uDDBE\\uDE30-\\uDE32\\uDE3B\\uDE3C\\uDE3E\\uDEAC\\uDEAE\\uDEAF\\uDEB6\\uDF26]|\\uD806[\\uDC2C-\\uDC2E\\uDC38\\uDD31-\\uDD35\\uDD37\\uDD38\\uDD3D\\uDD40\\uDD42\\uDDD1-\\uDDD3\\uDDDC-\\uDDDF\\uDDE4\\uDE39\\uDE57\\uDE58\\uDE97]|\\uD807[\\uDC2F\\uDC3E\\uDCA9\\uDCB1\\uDCB4\\uDD8A-\\uDD8E\\uDD93\\uDD94\\uDD96\\uDEF5\\uDEF6\\uDF03\\uDF34\\uDF35\\uDF3E\\uDF3F\\uDF41]|\\uD81B[\\uDF51-\\uDF87\\uDFF0\\uDFF1]|\\uD834[\\uDD66\\uDD6D])",$T:"[\\u11A8-\\u11FF\\uD7CB-\\uD7FB]",$V:"[\\u1160-\\u11A7\\uD7B0-\\uD7C6]",$Virama:"[\\u094D\\u09CD\\u0ACD\\u0B4D\\u0C4D\\u0D4D]",$ZWJ:"\\u200D"}},sentence:{segmentRules:{10:{after:"($Sp|$ParaSep)",before:"$SATerm$Close*$Sp*",breaks:!1},11:{before:"$SATerm$Close*$Sp*$ParaSep?",breaks:!0},3:{after:"$LF",before:"$CR",breaks:!1},4:{before:"$ParaSep",breaks:!0},5:{after:"(?:$Format|$Extend)",breaks:!1},6:{after:"$Numeric",before:"$ATerm",breaks:!1},7:{after:"$Upper",before:"($Upper|$Lower)$ATerm",breaks:!1},8:{after:"$NotPreLower_*$Lower",before:"$ATerm$Close*$Sp*",breaks:!1},8.1:{after:"($SContinue|$SATerm)",before:"$SATerm$Close*$Sp*",breaks:!1},9:{after:"($Close|$Sp|$ParaSep)",before:"$SATerm$Close*",breaks:!1},998:{after:"$Any",breaks:!1}},suppressions:[],variables:{$ATerm:"([\\.\\u2024\\uFE52\\uFF0E](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$Any:"(?:[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])",$CR:"\\r",$Close:"((?:[\"'-\\)\\[\\]\\{\\}\\xAB\\xBB\\u0F3A-\\u0F3D\\u169B\\u169C\\u2018-\\u201F\\u2039\\u203A\\u2045\\u2046\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u275B-\\u2760\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2E00-\\u2E0D\\u2E1C\\u2E1D\\u2E20-\\u2E29\\u2E42\\u2E55-\\u2E5C\\u3008-\\u3011\\u3014-\\u301B\\u301D-\\u301F\\uFD3E\\uFD3F\\uFE17\\uFE18\\uFE35-\\uFE44\\uFE47\\uFE48\\uFE59-\\uFE5E\\uFF08\\uFF09\\uFF3B\\uFF3D\\uFF5B\\uFF5D\\uFF5F\\uFF60\\uFF62\\uFF63]|\\uD83D[\\uDE76-\\uDE78])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$Extend:"(?:[\\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\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u200D\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFF9E\\uFF9F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC20-\\uDC7F\\uDD00-\\uDDEF])",$FE:"(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])",$Format:"(?:[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40\\uDC01)",$LF:"\\n",$Lower:"((?:[a-z\\xAA\\xB5\\xBA\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02B8\\u02C0\\u02C1\\u02E0-\\u02E4\\u0371\\u0373\\u0377\\u037A-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0560-\\u0588\\u10FC\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1DBF\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u2071\\u207F\\u2090-\\u209C\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2170-\\u217F\\u2184\\u24D0-\\u24E9\\u2C30-\\u2C5F\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7D\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B-\\uA69D\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7AF\\uA7B5\\uA7B7\\uA7B9\\uA7BB\\uA7BD\\uA7BF\\uA7C1\\uA7C3\\uA7C8\\uA7CA\\uA7D1\\uA7D3\\uA7D5\\uA7D7\\uA7D9\\uA7F2-\\uA7F4\\uA7F6\\uA7F8-\\uA7FA\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A]|\\uD801[\\uDC28-\\uDC4F\\uDCD8-\\uDCFB\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDF80\\uDF83-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD803[\\uDCC0-\\uDCF2]|\\uD806[\\uDCC0-\\uDCDF]|\\uD81B[\\uDE60-\\uDE7F]|\\uD835[\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]|\\uD837[\\uDF00-\\uDF09\\uDF0B-\\uDF1E\\uDF25-\\uDF2A]|\\uD838[\\uDC30-\\uDC6D]|\\uD83A[\\uDD22-\\uDD43])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$NotPreLower_:"(?:(?![\\n\\r!\\.\\?A-Za-z\\x85\\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-\\u0589\\u05D0-\\u05EA\\u05EF-\\u05F3\\u061D-\\u064A\\u066E\\u066F\\u0671-\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF-\\u0702\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07F9\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0837\\u0839\\u083D\\u083E\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0964\\u0965\\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\\u104A\\u104B\\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\\u1362\\u1367\\u1368\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166E-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1735\\u1736\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1803\\u1809\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1944\\u1945\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7-\\u1AAB\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B5A\\u1B5B\\u1B5E\\u1B5F\\u1B7D\\u1B7E\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C3B\\u1C3C\\u1C4D-\\u1C4F\\u1C5A-\\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\\u2024\\u2028\\u2029\\u203C\\u203D\\u2047-\\u2049\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u24B6-\\u24E9\\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\\u2E2E\\u2E2F\\u2E3C\\u2E53\\u2E54\\u3002\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA4FF-\\uA60C\\uA60E-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA6F3\\uA6F7\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA876\\uA877\\uA882-\\uA8B3\\uA8CE\\uA8CF\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA92F-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9C8\\uA9C9\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA5D-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF0-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABEB\\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\\uFE52\\uFE56\\uFE57\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF01\\uFF0E\\uFF1F\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF61\\uFF66-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\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\\uDE56\\uDE57\\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\\uDF55-\\uDF59\\uDF70-\\uDF81\\uDF86-\\uDF89\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC47\\uDC48\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCBE-\\uDCC1\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD41-\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC6\\uDDCD\\uDDDA\\uDDDC\\uDDDE\\uDDDF\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE38\\uDE39\\uDE3B\\uDE3C\\uDE3F\\uDE40\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA9\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4C\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDC2\\uDDC3\\uDDC9-\\uDDDB\\uDE00-\\uDE2F\\uDE41\\uDE42\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF3C-\\uDF3E\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD44\\uDD46\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE42\\uDE43\\uDE50\\uDE5C-\\uDE89\\uDE9B-\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40-\\uDC42\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDEF7\\uDEF8\\uDF02\\uDF04-\\uDF10\\uDF12-\\uDF33\\uDF43\\uDF44\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\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\\uDE6E-\\uDEBE\\uDED0-\\uDEED\\uDEF5\\uDF00-\\uDF2F\\uDF37\\uDF38\\uDF40-\\uDF44\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDE98\\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\\uDC9F]|\\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]|\\uD836\\uDE88|\\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]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF39\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A\\uDF50-\\uDFFF]|\\uD888[\\uDC00-\\uDFAF])[\\s\\S])",$Numeric:"((?:[0-9\\u0660-\\u0669\\u066B\\u066C\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]|\\uD801[\\uDCA0-\\uDCA9]|\\uD803[\\uDD30-\\uDD39]|\\uD804[\\uDC66-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDEF0-\\uDEF9]|\\uD805[\\uDC50-\\uDC59\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF39]|\\uD806[\\uDCE0-\\uDCE9\\uDD50-\\uDD59]|\\uD807[\\uDC50-\\uDC59\\uDD50-\\uDD59\\uDDA0-\\uDDA9\\uDF50-\\uDF59]|\\uD81A[\\uDE60-\\uDE69\\uDEC0-\\uDEC9\\uDF50-\\uDF59]|\\uD835[\\uDFCE-\\uDFFF]|\\uD838[\\uDD40-\\uDD49\\uDEF0-\\uDEF9]|\\uD839[\\uDCF0-\\uDCF9]|\\uD83A[\\uDD50-\\uDD59]|\\uD83E[\\uDFF0-\\uDFF9])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$OLetter:"((?:[\\u01BB\\u01C0-\\u01C3\\u0294\\u02B9-\\u02BF\\u02C6-\\u02D1\\u02EC\\u02EE\\u0374\\u0559\\u05D0-\\u05EA\\u05EF-\\u05F3\\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\\u10D0-\\u10FA\\u10FD-\\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\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\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\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u2135-\\u2138\\u2180-\\u2182\\u2185-\\u2188\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA66E\\uA67F\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA788\\uA78F\\uA7F7\\uA7FB-\\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\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\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\\uFF66-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC50-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF81\\uDF82]|\\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\\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\\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[\\uDC00-\\uDC6E\\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[\\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]|\\uD837\\uDF0A|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDCD0-\\uDCEB\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\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]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A\\uDF50-\\uDFFF]|\\uD888[\\uDC00-\\uDFAF])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$ParaSep:"([\\x85\\u2028\\u2029]|\\r|\\n)",$SATerm:"(((?:[!\\?\\u0589\\u061D-\\u061F\\u06D4\\u0700-\\u0702\\u07F9\\u0837\\u0839\\u083D\\u083E\\u0964\\u0965\\u104A\\u104B\\u1362\\u1367\\u1368\\u166E\\u1735\\u1736\\u1803\\u1809\\u1944\\u1945\\u1AA8-\\u1AAB\\u1B5A\\u1B5B\\u1B5E\\u1B5F\\u1B7D\\u1B7E\\u1C3B\\u1C3C\\u1C7E\\u1C7F\\u203C\\u203D\\u2047-\\u2049\\u2E2E\\u2E3C\\u2E53\\u2E54\\u3002\\uA4FF\\uA60E\\uA60F\\uA6F3\\uA6F7\\uA876\\uA877\\uA8CE\\uA8CF\\uA92F\\uA9C8\\uA9C9\\uAA5D-\\uAA5F\\uAAF0\\uAAF1\\uABEB\\uFE56\\uFE57\\uFF01\\uFF1F\\uFF61]|\\uD802[\\uDE56\\uDE57]|\\uD803[\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47\\uDC48\\uDCBE-\\uDCC1\\uDD41-\\uDD43\\uDDC5\\uDDC6\\uDDCD\\uDDDE\\uDDDF\\uDE38\\uDE39\\uDE3B\\uDE3C\\uDEA9]|\\uD805[\\uDC4B\\uDC4C\\uDDC2\\uDDC3\\uDDC9-\\uDDD7\\uDE41\\uDE42\\uDF3C-\\uDF3E]|\\uD806[\\uDD44\\uDD46\\uDE42\\uDE43\\uDE9B\\uDE9C]|\\uD807[\\uDC41\\uDC42\\uDEF7\\uDEF8\\uDF43\\uDF44]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37\\uDF38\\uDF44]|\\uD81B\\uDE98|\\uD82F\\uDC9F|\\uD836\\uDE88)(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)|([\\.\\u2024\\uFE52\\uFF0E](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*))",$SContinue:"([,\\x2D:\\u055D\\u060C\\u060D\\u07F8\\u1802\\u1808\\u2013\\u2014\\u3001\\uFE10\\uFE11\\uFE13\\uFE31\\uFE32\\uFE50\\uFE51\\uFE55\\uFE58\\uFE63\\uFF0C\\uFF0D\\uFF1A\\uFF64](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$STerm:"((?:[!\\?\\u0589\\u061D-\\u061F\\u06D4\\u0700-\\u0702\\u07F9\\u0837\\u0839\\u083D\\u083E\\u0964\\u0965\\u104A\\u104B\\u1362\\u1367\\u1368\\u166E\\u1735\\u1736\\u1803\\u1809\\u1944\\u1945\\u1AA8-\\u1AAB\\u1B5A\\u1B5B\\u1B5E\\u1B5F\\u1B7D\\u1B7E\\u1C3B\\u1C3C\\u1C7E\\u1C7F\\u203C\\u203D\\u2047-\\u2049\\u2E2E\\u2E3C\\u2E53\\u2E54\\u3002\\uA4FF\\uA60E\\uA60F\\uA6F3\\uA6F7\\uA876\\uA877\\uA8CE\\uA8CF\\uA92F\\uA9C8\\uA9C9\\uAA5D-\\uAA5F\\uAAF0\\uAAF1\\uABEB\\uFE56\\uFE57\\uFF01\\uFF1F\\uFF61]|\\uD802[\\uDE56\\uDE57]|\\uD803[\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47\\uDC48\\uDCBE-\\uDCC1\\uDD41-\\uDD43\\uDDC5\\uDDC6\\uDDCD\\uDDDE\\uDDDF\\uDE38\\uDE39\\uDE3B\\uDE3C\\uDEA9]|\\uD805[\\uDC4B\\uDC4C\\uDDC2\\uDDC3\\uDDC9-\\uDDD7\\uDE41\\uDE42\\uDF3C-\\uDF3E]|\\uD806[\\uDD44\\uDD46\\uDE42\\uDE43\\uDE9B\\uDE9C]|\\uD807[\\uDC41\\uDC42\\uDEF7\\uDEF8\\uDF43\\uDF44]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37\\uDF38\\uDF44]|\\uD81B\\uDE98|\\uD82F\\uDC9F|\\uD836\\uDE88)(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$Sep:"[\\x85\\u2028\\u2029]",$Sp:"([\\t\\x0B\\f \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$Upper:"((?:[A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C5\\u01C7\\u01C8\\u01CA\\u01CB\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F2\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FB8-\\u1FBC\\u1FC8-\\u1FCC\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFC\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2160-\\u216F\\u2183\\u24B6-\\u24CF\\u2C00-\\u2C2F\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AE\\uA7B0-\\uA7B4\\uA7B6\\uA7B8\\uA7BA\\uA7BC\\uA7BE\\uA7C0\\uA7C2\\uA7C4-\\uA7C7\\uA7C9\\uA7D0\\uA7D6\\uA7D8\\uA7F5\\uFF21-\\uFF3A]|\\uD801[\\uDC00-\\uDC27\\uDCB0-\\uDCD3\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95]|\\uD803[\\uDC80-\\uDCB2]|\\uD806[\\uDCA0-\\uDCBF]|\\uD81B[\\uDE40-\\uDE5F]|\\uD835[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA]|\\uD83A[\\uDD00-\\uDD21]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)"}},word:{segmentRules:{10:{after:"$AHLetter",before:"$Numeric",breaks:!1},11:{after:"$Numeric",before:"$Numeric($MidNum|$MidNumLetQ)",breaks:!1},12:{after:"($MidNum|$MidNumLetQ)$Numeric",before:"$Numeric",breaks:!1},13:{after:"$Katakana",before:"$Katakana",breaks:!1},13.1:{after:"$ExtendNumLet",before:"($AHLetter|$Numeric|$Katakana|$ExtendNumLet)",breaks:!1},13.2:{after:"($AHLetter|$Numeric|$Katakana)",before:"$ExtendNumLet",breaks:!1},15:{after:"$RI",before:"^($RI$RI)*$RI",breaks:!1},16:{after:"$RI",before:"[^\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB\\uDDFD\\uDEE0\\uDF76-\\uDF7A\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42\\uDC30-\\uDC40\\uDC47-\\uDC55\\uDEF0-\\uDEF4\\uDF30-\\uDF36\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1\\uDC9D\\uDC9E\\uDCA0-\\uDCA3\\uDF00-\\uDF2D\\uDF30-\\uDF46\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF\\uDCEC-\\uDCEF\\uDCD0-\\uDCD6\\uDD44-\\uDD4A\\uDDE6-\\uDDFF\\uDFFB-\\uDFFF\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF]($RI$RI)*$RI",breaks:!1},3:{after:"$LF",before:"$CR",breaks:!1},3.1:{before:"($Newline|$CR|$LF)",breaks:!0},3.2:{after:"($Newline|$CR|$LF)",breaks:!0},3.3:{after:"$ExtPict",before:"$ZWJ",breaks:!1},3.4:{after:"$WSegSpace",before:"$WSegSpace",breaks:!1},4:{after:"(?:$Format|$Extend|$ZWJ)",before:"$NotBreak_",breaks:!1},5:{after:"$AHLetter",before:"$AHLetter",breaks:!1},6:{after:"($MidLetter|$MidNumLetQ)$AHLetter",before:"$AHLetter",breaks:!1},7:{after:"$AHLetter",before:"$AHLetter($MidLetter|$MidNumLetQ)",breaks:!1},7.1:{after:"$Single_Quote",before:"$Hebrew_Letter",breaks:!1},7.2:{after:"$Double_Quote$Hebrew_Letter",before:"$Hebrew_Letter",breaks:!1},7.3:{after:"$Hebrew_Letter",before:"$Hebrew_Letter$Double_Quote",breaks:!1},8:{after:"$Numeric",before:"$Numeric",breaks:!1},9:{after:"$Numeric",before:"$AHLetter",breaks:!1}},suppressions:[],variables:{$AHLetter:"(((?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02D7\\u02DE-\\u02FF\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559-\\u055C\\u055E\\u0560-\\u0588\\u058A\\u05F3\\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\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1A00-\\u1A16\\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\\u2160-\\u2188\\u24B6-\\u24E9\\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\\u303B\\u303C\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA708-\\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\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB50-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\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]|\\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[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|\\uD80C[\\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]|\\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]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89])|[\\u05D0-\\u05EA\\u05EF-\\u05F2\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFB4F])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$ALetter:"((?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02D7\\u02DE-\\u02FF\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559-\\u055C\\u055E\\u0560-\\u0588\\u058A\\u05F3\\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\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1A00-\\u1A16\\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\\u2160-\\u2188\\u24B6-\\u24E9\\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\\u303B\\u303C\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA708-\\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\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB50-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\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]|\\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[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|\\uD80C[\\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]|\\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]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$CR:"\\r",$Double_Quote:'("(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)',$ExtPict:"(?:[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u2388\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2605\\u2607-\\u2612\\u2614-\\u2685\\u2690-\\u2705\\u2708-\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2767\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC00-\\uDCFF\\uDD0D-\\uDD0F\\uDD2F\\uDD6C-\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDAD-\\uDDE5\\uDE01-\\uDE0F\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE3C-\\uDE3F\\uDE49-\\uDFFA]|\\uD83D[\\uDC00-\\uDD3D\\uDD46-\\uDE4F\\uDE80-\\uDEFF\\uDF74-\\uDF7F\\uDFD5-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE-\\uDCFF\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDEFF]|\\uD83F[\\uDC00-\\uDFFD])",$Extend:"(?:[\\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\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFF9E\\uFF9F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC20-\\uDC7F\\uDD00-\\uDDEF])",$ExtendNumLet:"([_\\u202F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$FE:"(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])",$Format:"(?:[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40\\uDC01)",$Hebrew_Letter:"([\\u05D0-\\u05EA\\u05EF-\\u05F2\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFB4F](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$Katakana:"((?:[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30FA\\u30FC-\\u30FF\\u31F0-\\u31FF\\u32D0-\\u32FE\\u3300-\\u3357\\uFF66-\\uFF9D]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00\\uDD20-\\uDD22\\uDD55\\uDD64-\\uDD67])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$LF:"\\n",$MidLetter:"([\\xB7\\u0387\\u055F\\u05F4\\u2027\\uFE13](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$MidNum:"([,;\\u037E\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$MidNumLet:"([\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E](?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$MidNumLetQ:"(([\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]|')(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$Newline:"[\\x0B\\f\\x85\\u2028\\u2029]",$NotBreak_:"(?:(?![\\n-\\r\\x85\\u2028\\u2029])[\\s\\S])",$Numeric:"((?:[0-9\\u0660-\\u0669\\u066B\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]|\\uD801[\\uDCA0-\\uDCA9]|\\uD803[\\uDD30-\\uDD39]|\\uD804[\\uDC66-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDEF0-\\uDEF9]|\\uD805[\\uDC50-\\uDC59\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF39]|\\uD806[\\uDCE0-\\uDCE9\\uDD50-\\uDD59]|\\uD807[\\uDC50-\\uDC59\\uDD50-\\uDD59\\uDDA0-\\uDDA9\\uDF50-\\uDF59]|\\uD81A[\\uDE60-\\uDE69\\uDEC0-\\uDEC9\\uDF50-\\uDF59]|\\uD835[\\uDFCE-\\uDFFF]|\\uD838[\\uDD40-\\uDD49\\uDEF0-\\uDEF9]|\\uD839[\\uDCF0-\\uDCF9]|\\uD83A[\\uDD50-\\uDD59]|\\uD83E[\\uDFF0-\\uDFF9])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$RI:"((?:\\uD83C[\\uDDE6-\\uDDFF])(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$Single_Quote:"('(?:[\\xAD\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u061C\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0898-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\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-\\uFE2F\\uFEFF\\uFF9E\\uFF9F\\uFFF9-\\uFFFB]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDEFD-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00\\uDF01\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42]|\\uD80D[\\uDC30-\\uDC40\\uDC47-\\uDC55]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E\\uDCA0-\\uDCA3]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDFFB-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F\\uDD00-\\uDDEF])*)",$WSegSpace:"[ \\u1680\\u2000-\\u2006\\u2008-\\u200A\\u205F\\u3000]",$ZWJ:"\\u200D"}}},ru:{sentence:{segmentRules:{},suppressions:["руб.","янв.","до н. э.","сент.","тел.","дек.","февр.","нояб.","апр.","н. э.","окт.","тыс.","авг.","проф.","н.э.","кв.","ул.","отд."],variables:{}}},zh:{}}},416:(u,D)=>{Object.defineProperty(D,"__esModule",{value:!0}),D.isSurrogate=D.replaceVariables=void 0;D.replaceVariables=function(u,D){return D.replaceAll(/\$[A-Za-z0-9_]+/gm,(function(D){if(!(D in u))throw new Error("No such variable ".concat(D));return u[D]}))};D.isSurrogate=function(u,D){return 55296<=u.charCodeAt(D-1)&&u.charCodeAt(D-1)<=56319&&56320<=u.charCodeAt(D)&&u.charCodeAt(D)<=57343}},256:(u,D,e)=>{Object.defineProperty(D,"__esModule",{value:!0}),D.Segmenter=void 0;var t=e(316),C=e(984),F=e(416),A=e(32),E=e(956),r=function(u,D,e){return new RegExp("".concat(e?"^":"").concat((0,F.replaceVariables)(D,u)).concat(e?"":"$"))},n=function(u,D){return{breaks:u,matchingRule:D}},i=function(){function u(D,e){if(void 0===this.constructor)throw TypeError("Constructor Intl.Segmenter requires 'new'");var F=(0,A.CanonicalizeLocaleList)(D);e=(0,A.GetOptionsObject)(e);var n=Object.create(null),i=(0,A.GetOption)(e,"localeMatcher","string",["lookup","best fit"],"best fit");n.localeMatcher=i;var s=(0,A.GetOption)(e,"granularity","string",["word","sentence","grapheme"],"grapheme");o(this,"granularity",s);var a=(0,E.ResolveLocale)(u.availableLocales,F,n,[],{},(function(){return""}));if(o(this,"locale",a.locale),this.mergedSegmentationTypeValue=C.SegmentationRules.root[s],a.locale.length){var B=C.SegmentationRules[a.locale];if(s in B){var c=B[s];this.mergedSegmentationTypeValue.variables=t.__assign(t.__assign({},this.mergedSegmentationTypeValue.variables),c.variables),this.mergedSegmentationTypeValue.segmentRules=t.__assign(t.__assign({},this.mergedSegmentationTypeValue.segmentRules),c.segmentRules),this.mergedSegmentationTypeValue.suppressions=t.__spreadArray(t.__spreadArray([],this.mergedSegmentationTypeValue.suppressions,!0),c.suppressions,!0)}}this.rules=function(u){for(var D={},e=0,t=Object.keys(u.segmentRules);e=this.input.length)){var e=0;if(0===D)e=0;else for(var t=this.input,C=D;C>=0;C--){if(E=this.segmenter.breaksAt(C,t).breaks){e=C;break}}var F=this.input.substring(e);for(C=1;C<=F.length;C++){var A=this.segmenter.breaksAt(C,F),E=A.breaks,r=A.matchingRule;if(E){var n=F.substring(0,C);return s(this.segmenter,n,e,this.input,r)}}}},u}(),B=new WeakMap;function o(u,D,e){(0,A.setInternalSlot)(B,u,D,e)}function c(u,D){if(!(u instanceof i))throw TypeError("Method Intl.Segmenter.prototype.".concat(D," called on incompatible receiver"))}try{"undefined"!=typeof Symbol&&Object.defineProperty(i.prototype,Symbol.toStringTag,{value:"Intl.Segmenter",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype.constructor,"length",{value:0,writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(i.supportedLocalesOf,"length",{value:1,writable:!1,enumerable:!1,configurable:!0})}catch(u){}},672:u=>{const D=64,e="application/json",t=["act","height","duration","incoming","mime","name","premime","preref","preview","ref","size","state","url","val","width"],C=new Intl.Segmenter,F=[{name:"ST",start:/(?:^|[\W_])(\*)[^\s*]/,end:/[^\s*](\*)(?=$|[\W_])/},{name:"EM",start:/(?:^|\W)(_)[^\s_]/,end:/[^\s_](_)(?=$|\W)/},{name:"DL",start:/(?:^|[\W_])(~)[^\s~]/,end:/[^\s~](~)(?=$|[\W_])/},{name:"CO",start:/(?:^|\W)(`)[^`]/,end:/[^`](`)(?=$|\W)/}],A=["QQ"],E=[{name:"LN",dataName:"url",pack:function(u){return/^[a-z]+:\/\//i.test(u)||(u="http://"+u),{url:u}},re:/(?:(?:https?|ftp):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/gi},{name:"MN",dataName:"val",pack:function(u){return{val:u.slice(1)}},re:/\B@([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu},{name:"HT",dataName:"val",pack:function(u){return{val:u.slice(1)}},re:/\B#([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu}],r={AU:{html_tag:"audio",md_tag:void 0,isVoid:!1},BN:{html_tag:"button",md_tag:void 0,isVoid:!1},BR:{html_tag:"br",md_tag:"\n",isVoid:!0},CO:{html_tag:"tt",md_tag:"`",isVoid:!1},DL:{html_tag:"del",md_tag:"~",isVoid:!1},EM:{html_tag:"i",md_tag:"_",isVoid:!1},EX:{html_tag:"",md_tag:void 0,isVoid:!0},FM:{html_tag:"div",md_tag:void 0,isVoid:!1},HD:{html_tag:"",md_tag:void 0,isVoid:!1},HL:{html_tag:"span",md_tag:void 0,isVoid:!1},HT:{html_tag:"a",md_tag:void 0,isVoid:!1},IM:{html_tag:"img",md_tag:void 0,isVoid:!1},LN:{html_tag:"a",md_tag:void 0,isVoid:!1},MN:{html_tag:"a",md_tag:void 0,isVoid:!1},RW:{html_tag:"div",md_tag:void 0,isVoid:!1},QQ:{html_tag:"div",md_tag:void 0,isVoid:!1},ST:{html_tag:"b",md_tag:"*",isVoid:!1},VC:{html_tag:"div",md_tag:void 0,isVoid:!1},VD:{html_tag:"video",md_tag:void 0,isVoid:!1}};function n(u,D,e){if(!u)return null;try{const e=atob(u),t=e.length,C=new ArrayBuffer(t),F=new Uint8Array(C);for(let u=0;u"",close:u=>""},EM:{open:u=>"",close:u=>""},DL:{open:u=>"",close:u=>""},CO:{open:u=>"",close:u=>""},BR:{open:u=>"
",close:u=>""},HD:{open:u=>"",close:u=>""},HL:{open:u=>'',close:u=>""},LN:{open:u=>'',close:u=>"",props:u=>u?{href:u.url,target:"_blank"}:null},MN:{open:u=>'',close:u=>"",props:u=>u?{id:u.val}:null},HT:{open:u=>'',close:u=>"",props:u=>u?{id:u.val}:null},BN:{open:u=>"",props:u=>u?{"data-act":u.act,"data-val":u.val,"data-name":u.name,"data-ref":u.ref}:null},AU:{open:u=>'",props:u=>u?{src:u.ref||n(u.val,u.mime,a.logger),"data-preload":u.ref?"metadata":"auto","data-duration":u.duration,"data-name":u.name,"data-size":u.val?.75*u.val.length|0:0|u.size,"data-mime":u.mime}:null},IM:{open:u=>{const D=i(u._tempPreview,u.mime),e=n(u.val,u.mime,a.logger),t=u.ref||e;return(u.name?'':"")+''},close:u=>u.name?"":"",props:u=>u?{src:i(u._tempPreview,u.mime)||u.ref||n(u.val,u.mime,a.logger),title:u.name,alt:u.name,"data-width":u.width,"data-height":u.height,"data-name":u.name,"data-size":u.ref?0|u.size:u.val?.75*u.val.length|0:0|u.size,"data-mime":u.mime}:null},FM:{open:u=>"
",close:u=>"
"},RW:{open:u=>"
",close:u=>"
"},QQ:{open:u=>"
",close:u=>"
",props:u=>u?{}:null},VC:{open:u=>"
",close:u=>"
",props:u=>u?{"data-duration":u.duration,"data-state":u.state}:{}},VD:{open:u=>{const D=i(u._tempPreview,u.mime),e=u.ref||n(u.preview,u.premime||"image/jpeg",a.logger);return''},close:u=>"",props:u=>{if(!u)return null;const D=u.preref||n(u.preview,u.premime||"image/jpeg",a.logger);return{src:D,"data-src":u.ref||n(u.val,u.mime,a.logger),"data-width":u.width,"data-height":u.height,"data-preload":u.ref?"metadata":"auto","data-preview":D,"data-duration":0|u.duration,"data-name":u.name,"data-size":u.ref?0|u.size:u.val?.75*u.val.length|0:0|u.size,"data-mime":u.mime}}}},a=function(){this.txt="",this.fmt=[],this.ent=[]};function B(u,D,e,t){const C=[];if(0==t.length)return[];for(let e in t){const F=t[e];F.at>D&&C.push({txt:u.slice(D,F.at)});const A={tp:F.tp},E=B(u,F.at+1,F.end,F.children);E.length>0?A.children=E:A.txt=F.txt,C.push(A),D=F.end+1}return De.end?(D.push(u[t]),e=u[t]):u[t].end<=e.end&&e.children.push(u[t]);for(let u in D)D[u].children=o(D[u].children);return D}function c(u){if(!u)return null;u="string"==typeof u?{txt:u}:u;let{txt:D,fmt:e,ent:t}=u;if(D=D||"",Array.isArray(t)||(t=[]),!Array.isArray(e)||0==e.length){if(0==t.length)return{text:D};e=[{at:0,len:0,key:0}]}const C=[],F=[];e.forEach((u=>{if(!u||"object"!=typeof u)return;if(!["undefined","number"].includes(typeof u.at))return;if(!["undefined","number"].includes(typeof u.len))return;let e=0|u.at,A=0|u.len;if(A<0)return;let E=u.key||0;t.length>0&&("number"!=typeof E||E<0||E>=t.length)||(e<=-1?F.push({start:-1,end:0,key:E}):e+A>S(D).length||(u.tp?C.push({type:u.tp,start:e,end:e+A}):t.length>0&&"object"==typeof t[E]&&C.push({start:e,end:e+A,key:E})))})),C.sort(((u,D)=>{let e=u.start-D.start;return 0!=e?e:(e=D.end-u.end,0!=e?e:A.indexOf(D.type)-A.indexOf(u.type))})),F.length>0&&C.push(...F),C.forEach((u=>{t.length>0&&!u.type&&t[u.key]&&"object"==typeof t[u.key]&&(u.type=t[u.key].tp,u.data=t[u.key].data),u.type||(u.type="HD")}));const E=S(D);let r=l({},E,0,E.length,C);return r=_(r,(function(u){if(Array.isArray(u.children)&&1==u.children.length){const D=u.children[0];if(u.type)D.type||D.children||(u.text=D.text,delete u.children);else{const e=u.parent;(u=D).parent=e}}return u})),r}function d(u,D){return D?(u.children||(u.children=[]),u.text&&(u.children.push({text:u.text,parent:u}),delete u.text),D.parent=u,u.children.push(D),u):u}function l(u,D,e,t,C){if(!C||0==C.length)return eu.segment)).join("")}),u;for(let t=0;tu.segment)).join("")}),e=F.start);const A=[];for(;tu.segment)).join("")}),u}function h(u,D,e){if(!D)return u;u.txt=u.txt||"";const t=S(u.txt).length;if(D.text?u.txt+=D.text:Array.isArray(D.children)&&D.children.forEach((D=>{h(u,D,e)})),D.type){const C=S(u.txt).length-t;if(u.fmt=u.fmt||[],Object.keys(D.data||{}).length>0){u.ent=u.ent||[];const F=void 0===e[D.key]?u.ent.length:e[D.key];e[D.key]=F,u.ent[F]={tp:D.type,data:D.data},D.att?u.fmt.push({at:-1,len:0,key:F}):u.fmt.push({at:t,len:C,key:F})}else u.fmt.push({tp:D.type,at:t,len:C})}return u}function _(u,D,e){if(!u)return null;let t=D.call(e,u);if(!t||!t.children)return t;const C=[];for(let u in t.children){let F=t.children[u];F&&(F=_(F,D,e),F&&C.push(F))}return 0==C.length?t.children=null:t.children=C,t}function p(u,D,e,t,C){if(!u)return null;t&&u.type&&t.push(u.type);let F=[];for(let e in u.children){const A=p(u.children[e],D,e,t,C);A&&F.push(A)}return 0==F.length&&(F=u.text?[u.text]:null),t&&u.type&&t.pop(),D.call(C,u.type,u.data,F,e,t)}function f(u,D,e){if(!u)return null;e&&(D-=e.length);return _(u,(function(u){if(D<=-1)return null;if(u.att)return u;if(0==D)u.text=e,D=-1;else if(u.text){const t=S(u.text);t.length>D?(u.text=t.slice(0,D).map((u=>u.segment)).join("")+e,D=-1):D-=t.length}return u}))}function g(u,D){return _(u,(u=>{const e=w(u.data,!0,D?D(u):null);return e?u.data=e:delete u.data,u}))}function m(u){if("BR"==u.type)u=null;else if(u.text)u.type||(u.text=u.text.trimStart(),u.text||(u=null));else if(!u.type&&u.children&&u.children.length>0){const D=m(u.children[0]);D?u.children[0]=D:(u.children.shift(),u.type||0!=u.children.length||(u=null))}return u}function y(u,D){if(!u)return null;if(u.att)u.text=" ",delete u.att,delete u.children;else if(u.children){const t=[],C=[];for(let F in u.children){const A=u.children[F];if(A.att){if(t.length==D)continue;if(A.data.mime==e)continue;delete A.att,delete A.children,A.text=" ",t.push(A)}else C.push(A)}u.children=C.concat(t)}return u}function b(u,D){let e="",t=[];for(let C in u){const F=u[C];if(!F.txt){const u=b(F.children,e.length+D);F.txt=u.txt,t=t.concat(u.fmt)}F.tp&&t.push({at:e.length+D,len:F.txt.length,tp:F.tp}),e+=F.txt}return{txt:e,fmt:t}}function w(u,e,C){if(u&&Object.entries(u).length>0){C=C||[];const F={};if(t.forEach((t=>{if(u[t]){if(e&&!C.includes(t)&&("string"==typeof u[t]||Array.isArray(u[t]))&&u[t].length>D)return;if("object"==typeof u[t])return;F[t]=u[t]}})),0!=Object.entries(F).length)return F}return null}function v(u,D,e){const t=function(u){const D=[];let e=0,t=0;for(const{segment:C}of u){for(let u=0;u{let D,C,r=[];if(F.forEach((D=>{r=r.concat(function(u,D,e,t){const C=[];let F=0,A=u.slice(0);for(;A.length>0;){const E=D.exec(A);if(null==E)break;let r=E.index+E[0].lastIndexOf(E[1]);A=A.slice(r+1),r+=F,F=r+1;const n=e?e.exec(A):null;if(null==n)break;let i=n.index+n[0].indexOf(n[1]);A=A.slice(i+1),i+=F,F=i+1,C.push({txt:u.slice(r+1,i),children:[],at:r,end:i,tp:t})}return C}(u,D.start,D.end,D.name))})),0==r.length)C={txt:u};else{r.sort(((u,D)=>{const e=u.at-D.at;return 0!=e?e:D.end-u.end})),r=o(r);const D=b(B(u,0,u.length,r),0);C={txt:D.txt,fmt:D.fmt}}if(D=function(u){let D,e=[];if(E.forEach((t=>{for(;null!==(D=t.re.exec(u));)e.push({offset:D.index,len:D[0].length,unique:D[0],data:t.pack(D[0]),type:t.name})})),0==e.length)return e;e.sort(((u,D)=>u.offset-D.offset));let t=-1;return e=e.filter((u=>{const D=u.offset>t;return t=u.offset+u.len,D})),e}(C.txt),D.length>0){const u=[];for(let C in D){const F=D[C];let A=t[F.unique];A||(A=e.length,t[F.unique]=A,e.push({tp:F.type,data:F.data})),u.push({at:F.offset,len:F.len,key:A})}C.ent=u}A.push(C)}));const r={txt:""};if(A.length>0){if(r.txt=A[0].txt,r.fmt=(A[0].fmt||[]).concat(A[0].ent||[]),r.fmt.length){const u=C.segment(r.txt);for(const D of r.fmt)({at:D.at,len:D.len}=v(D,u,r.txt))}for(let u=1;u{const{at:C,len:F}=v(u,t,D.txt);return u.at=C+e,u.len=F,u})))),D.ent&&(n=t,0==Object.keys(n??{}).length&&(t=C.segment(D.txt)),r.fmt=r.fmt.concat(D.ent.map((u=>{const{at:C,len:F}=v(u,t,D.txt);return u.at=C+e,u.len=F,u}))))}0==r.fmt.length&&delete r.fmt,e.length>0&&(r.ent=e)}var n;return r},a.append=function(u,D){if(!u)return D;if(!D)return u;u.txt=u.txt||"";const e=S(u.txt).length;return"string"==typeof D?u.txt+=D:D.txt&&(u.txt+=D.txt),Array.isArray(D.fmt)&&(u.fmt=u.fmt||[],Array.isArray(D.ent)&&(u.ent=u.ent||[]),D.fmt.forEach((t=>{const C={at:(0|t.at)+e,len:0|t.len};-1==t.at&&(C.at=-1,C.len=0),t.tp?C.tp=t.tp:(C.key=u.ent.length,u.ent.push(D.ent[t.key||0])),u.fmt.push(C)}))),u},a.insertImage=function(u,D,e){(u=u||{txt:" "}).ent=u.ent||[],u.fmt=u.fmt||[],u.fmt.push({at:0|D,len:1,key:u.ent.length});const t={tp:"IM",data:{mime:e.mime,ref:e.refurl,val:e.bits||e.preview,width:e.width,height:e.height,name:e.filename,size:0|e.size}};return e.urlPromise&&(t.data._tempPreview=e._tempPreview,t.data._processing=!0,e.urlPromise.then((u=>{t.data.ref=u,t.data._tempPreview=void 0,t.data._processing=void 0}),(u=>{t.data._processing=void 0}))),u.ent.push(t),u},a.insertVideo=function(u,D,e){(u=u||{txt:" "}).ent=u.ent||[],u.fmt=u.fmt||[],u.fmt.push({at:0|D,len:1,key:u.ent.length});const t={tp:"VD",data:{mime:e.mime,ref:e.refurl,val:e.bits,preref:e.preref,preview:e.preview,width:e.width,height:e.height,duration:0|e.duration,name:e.filename,size:0|e.size}};return e.urlPromise&&(t.data._tempPreview=e._tempPreview,t.data._processing=!0,e.urlPromise.then((u=>{t.data.ref=u[0],t.data.preref=u[1],t.data._tempPreview=void 0,t.data._processing=void 0}),(u=>{t.data._processing=void 0}))),u.ent.push(t),u},a.insertAudio=function(u,D,e){(u=u||{txt:" "}).ent=u.ent||[],u.fmt=u.fmt||[],u.fmt.push({at:0|D,len:1,key:u.ent.length});const t={tp:"AU",data:{mime:e.mime,val:e.bits,duration:0|e.duration,preview:e.preview,name:e.filename,size:0|e.size,ref:e.refurl}};return e.urlPromise&&(t.data._processing=!0,e.urlPromise.then((u=>{t.data.ref=u,t.data._processing=void 0}),(u=>{t.data._processing=void 0}))),u.ent.push(t),u},a.videoCall=function(u){return{txt:" ",fmt:[{at:0,len:1,key:0}],ent:[{tp:"VC",data:{aonly:u}}]}},a.updateVideoCall=function(u,D){const e=((u||{}).fmt||[])[0];if(!e)return u;let t;if("VC"==e.tp)delete e.tp,e.key=0,t={tp:"VC"},u.ent=[t];else if(t=(u.ent||[])[0|e.key],!t||"VC"!=t.tp)return u;return t.data=t.data||{},Object.assign(t.data,D),u},a.quote=function(u,D,e){const t=a.append(a.appendLineBreak(a.mention(u,D)),e);return t.fmt.push({at:0,len:S(t.txt).length,tp:"QQ"}),t},a.mention=function(u,D){return{txt:u||"",fmt:[{at:0,len:S(u||"").length,key:0}],ent:[{tp:"MN",data:{val:D}}]}},a.appendLink=function(u,D){(u=u||{txt:""}).ent=u.ent||[],u.fmt=u.fmt||[],u.fmt.push({at:u.txt.length,len:D.txt.length,key:u.ent.length}),u.txt+=D.txt;const e={tp:"LN",data:{url:D.url}};return u.ent.push(e),u},a.appendImage=function(u,D){return(u=u||{txt:""}).txt+=" ",a.insertImage(u,u.txt.length-1,D)},a.appendAudio=function(u,D){return(u=u||{txt:""}).txt+=" ",a.insertAudio(u,u.txt.length-1,D)},a.attachFile=function(u,D){(u=u||{txt:""}).ent=u.ent||[],u.fmt=u.fmt||[],u.fmt.push({at:-1,len:0,key:u.ent.length});const e={tp:"EX",data:{mime:D.mime,val:D.data,name:D.filename,ref:D.refurl,size:0|D.size}};return D.urlPromise&&(e.data._processing=!0,D.urlPromise.then((u=>{e.data.ref=u,e.data._processing=void 0}),(u=>{e.data._processing=void 0}))),u.ent.push(e),u},a.wrapInto=function(u,D,e,t){return"string"==typeof u&&(u={txt:u}),u.fmt=u.fmt||[],u.fmt.push({at:e||0,len:t||u.txt.length,tp:D}),u},a.wrapAsForm=function(u,D,e){return a.wrapInto(u,"FM",D,e)},a.insertButton=function(u,D,e,t,C,F,A){return"string"==typeof u&&(u={txt:u}),!u||!u.txt||u.txt.length{switch(u.type){case"IM":return["val"];case"VD":return["preview"]}return null})),h({},e,[])},a.preview=function(u,D,e){let t=c(u);t=y(t,3);if(t=_(t,(function(u){return"MN"==u.type?u.parent&&u.parent.type||!(u.text||"").startsWith("➦")||(u.text="➦",delete u.children):"QQ"==u.type?(u.text=" ",delete u.children):"BR"==u.type&&(u.text=" ",delete u.children,delete u.type),u})),t=f(t,D,"…"),e){const u={IM:["val"],VD:["preview"]};t=g(t,(D=>u[D.type]))}else t=g(t);return h({},t,[])},a.toPlainText=function(u){return"string"==typeof u?u:u.txt},a.isPlainText=function(u){return"string"==typeof u||!(u.fmt||u.ent)},a.toMarkdown=function(u){return p(c(u),(function(u,D,e){const t=r[u];let C=e?e.join(""):"";return t&&(t.isVoid?C=t.md_tag||"":t.md_tag&&(C=t.md_tag+C+t.md_tag)),C}),0)},a.isValid=function(u){if(!u)return!1;const{txt:D,fmt:e,ent:t}=u;if(!D&&""!==D&&!e&&!t)return!1;const C=typeof D;return("string"==C||"undefined"==C||null===D)&&(!(void 0!==e&&!Array.isArray(e)&&null!==e)&&!(void 0!==t&&!Array.isArray(t)&&null!==t))},a.hasAttachments=function(u){if(!Array.isArray(u.fmt))return!1;for(let D in u.fmt){const e=u.fmt[D];if(e&&e.at<0){const D=u.ent[0|e.key];return D&&"EX"==D.tp&&D.data}}return!1},a.attachments=function(u,D,e){if(!Array.isArray(u.fmt))return;let t=0;for(let C in u.fmt){let F=u.fmt[C];if(F&&F.at<0){const C=u.ent[0|F.key];if(C&&"EX"==C.tp&&C.data&&D.call(e,C.data,t++,"EX"))break}}},a.hasEntities=function(u){return u.ent&&u.ent.length>0},a.entities=function(u,D,e){if(u.ent&&u.ent.length>0)for(let t in u.ent)if(u.ent[t]&&D.call(e,u.ent[t].data,t,u.ent[t].tp))break},a.styles=function(u,D,e){if(u.fmt&&u.fmt.length>0)for(let t in u.fmt){const C=u.fmt[t];if(C&&D.call(e,C.tp,C.at,C.len,C.key,t))break}},a.sanitizeEntities=function(u){if(u&&u.ent&&u.ent.length>0)for(let D in u.ent){const e=u.ent[D];if(e&&e.data){const t=w(e.data);t?u.ent[D].data=t:delete u.ent[D].data}}return u},a.getDownloadUrl=function(u){let D=null;return u.mime!=e&&u.val?D=n(u.val,u.mime,a.logger):"string"==typeof u.ref&&(D=u.ref),D},a.isProcessing=function(u){return!!u._processing},a.getPreviewUrl=function(u){return u.val?n(u.val,u.mime,a.logger):null},a.getEntitySize=function(u){return u.size?u.size:u.val?.75*u.val.length|0:0},a.getEntityMimeType=function(u){return u.mime||"text/plain"},a.tagName=function(u){return r[u]&&r[u].html_tag},a.attrValue=function(u,D){if(D&&s[u]&&s[u].props)return s[u].props(D)},a.getContentType=function(){return"text/x-drafty"},u.exports=a},316:(u,D,e)=>{e.r(D),e.d(D,{__addDisposableResource:()=>R,__assign:()=>F,__asyncDelegator:()=>b,__asyncGenerator:()=>y,__asyncValues:()=>w,__await:()=>m,__awaiter:()=>o,__classPrivateFieldGet:()=>x,__classPrivateFieldIn:()=>k,__classPrivateFieldSet:()=>P,__createBinding:()=>d,__decorate:()=>E,__disposeResources:()=>I,__esDecorate:()=>n,__exportStar:()=>l,__extends:()=>C,__generator:()=>c,__importDefault:()=>T,__importStar:()=>M,__makeTemplateObject:()=>v,__metadata:()=>B,__param:()=>r,__propKey:()=>s,__read:()=>_,__rest:()=>A,__runInitializers:()=>i,__setFunctionName:()=>a,__spread:()=>p,__spreadArray:()=>g,__spreadArrays:()=>f,__values:()=>h,default:()=>L});var t=function(u,D){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(u,D){u.__proto__=D}||function(u,D){for(var e in D)Object.prototype.hasOwnProperty.call(D,e)&&(u[e]=D[e])},t(u,D)};function C(u,D){if("function"!=typeof D&&null!==D)throw new TypeError("Class extends value "+String(D)+" is not a constructor or null");function e(){this.constructor=u}t(u,D),u.prototype=null===D?Object.create(D):(e.prototype=D.prototype,new e)}var F=function(){return F=Object.assign||function(u){for(var D,e=1,t=arguments.length;e=0;E--)(C=u[E])&&(A=(F<3?C(A):F>3?C(D,e,A):C(D,e))||A);return F>3&&A&&Object.defineProperty(D,e,A),A}function r(u,D){return function(e,t){D(e,t,u)}}function n(u,D,e,t,C,F){function A(u){if(void 0!==u&&"function"!=typeof u)throw new TypeError("Function expected");return u}for(var E,r=t.kind,n="getter"===r?"get":"setter"===r?"set":"value",i=!D&&u?t.static?u:u.prototype:null,s=D||(i?Object.getOwnPropertyDescriptor(i,t.name):{}),a=!1,B=e.length-1;B>=0;B--){var o={};for(var c in t)o[c]="access"===c?{}:t[c];for(var c in t.access)o.access[c]=t.access[c];o.addInitializer=function(u){if(a)throw new TypeError("Cannot add initializers after decoration has completed");F.push(A(u||null))};var d=(0,e[B])("accessor"===r?{get:s.get,set:s.set}:s[n],o);if("accessor"===r){if(void 0===d)continue;if(null===d||"object"!=typeof d)throw new TypeError("Object expected");(E=A(d.get))&&(s.get=E),(E=A(d.set))&&(s.set=E),(E=A(d.init))&&C.unshift(E)}else(E=A(d))&&("field"===r?C.unshift(E):s[n]=E)}i&&Object.defineProperty(i,t.name,s),a=!0}function i(u,D,e){for(var t=arguments.length>2,C=0;C0&&C[C.length-1])||6!==E[0]&&2!==E[0])){A=0;continue}if(3===E[0]&&(!C||E[1]>C[0]&&E[1]=u.length&&(u=void 0),{value:u&&u[t++],done:!u}}};throw new TypeError(D?"Object is not iterable.":"Symbol.iterator is not defined.")}function _(u,D){var e="function"==typeof Symbol&&u[Symbol.iterator];if(!e)return u;var t,C,F=e.call(u),A=[];try{for(;(void 0===D||D-- >0)&&!(t=F.next()).done;)A.push(t.value)}catch(u){C={error:u}}finally{try{t&&!t.done&&(e=F.return)&&e.call(F)}finally{if(C)throw C.error}}return A}function p(){for(var u=[],D=0;D1||E(u,D)}))})}function E(u,D){try{(e=C[u](D)).value instanceof m?Promise.resolve(e.value.v).then(r,n):i(F[0][2],e)}catch(u){i(F[0][3],u)}var e}function r(u){E("next",u)}function n(u){E("throw",u)}function i(u,D){u(D),F.shift(),F.length&&E(F[0][0],F[0][1])}}function b(u){var D,e;return D={},t("next"),t("throw",(function(u){throw u})),t("return"),D[Symbol.iterator]=function(){return this},D;function t(t,C){D[t]=u[t]?function(D){return(e=!e)?{value:m(u[t](D)),done:!1}:C?C(D):D}:C}}function w(u){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var D,e=u[Symbol.asyncIterator];return e?e.call(u):(u=h(u),D={},t("next"),t("throw"),t("return"),D[Symbol.asyncIterator]=function(){return this},D);function t(e){D[e]=u[e]&&function(D){return new Promise((function(t,C){(function(u,D,e,t){Promise.resolve(t).then((function(D){u({value:D,done:e})}),D)})(t,C,(D=u[e](D)).done,D.value)}))}}}function v(u,D){return Object.defineProperty?Object.defineProperty(u,"raw",{value:D}):u.raw=D,u}var S=Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D};function M(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&d(D,u,e);return S(D,u),D}function T(u){return u&&u.__esModule?u:{default:u}}function x(u,D,e,t){if("a"===e&&!t)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof D?u!==D||!t:!D.has(u))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?t:"a"===e?t.call(u):t?t.value:D.get(u)}function P(u,D,e,t,C){if("m"===t)throw new TypeError("Private method is not writable");if("a"===t&&!C)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof D?u!==D||!C:!D.has(u))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===t?C.call(u,e):C?C.value=e:D.set(u,e),e}function k(u,D){if(null===D||"object"!=typeof D&&"function"!=typeof D)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof u?D===u:u.has(D)}function R(u,D,e){if(null!=D){if("object"!=typeof D&&"function"!=typeof D)throw new TypeError("Object expected.");var t;if(e){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");t=D[Symbol.asyncDispose]}if(void 0===t){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");t=D[Symbol.dispose]}if("function"!=typeof t)throw new TypeError("Object not disposable.");u.stack.push({value:D,dispose:t,async:e})}else e&&u.stack.push({async:!0});return D}var N="function"==typeof SuppressedError?SuppressedError:function(u,D,e){var t=new Error(e);return t.name="SuppressedError",t.error=u,t.suppressed=D,t};function I(u){function D(D){u.error=u.hasError?new N(D,u.error,"An error was suppressed during disposal."):D,u.hasError=!0}return function e(){for(;u.stack.length;){var t=u.stack.pop();try{var C=t.dispose&&t.dispose.call(t.value);if(t.async)return Promise.resolve(C).then(e,(function(u){return D(u),e()}))}catch(u){D(u)}}if(u.hasError)throw u.error}()}const L={__extends:C,__assign:F,__rest:A,__decorate:E,__param:r,__metadata:B,__awaiter:o,__generator:c,__createBinding:d,__exportStar:l,__values:h,__read:_,__spread:p,__spreadArrays:f,__spreadArray:g,__await:m,__asyncGenerator:y,__asyncDelegator:b,__asyncValues:w,__makeTemplateObject:v,__importStar:M,__importDefault:T,__classPrivateFieldGet:x,__classPrivateFieldSet:P,__classPrivateFieldIn:k,__addDisposableResource:R,__disposeResources:I}}},D={};function e(t){var C=D[t];if(void 0!==C)return C.exports;var F=D[t]={exports:{}};return u[t](F,F.exports,e),F.exports}e.n=u=>{var D=u&&u.__esModule?()=>u.default:()=>u;return e.d(D,{a:D}),D},e.d=(u,D)=>{for(var t in D)e.o(D,t)&&!e.o(u,t)&&Object.defineProperty(u,t,{enumerable:!0,get:D[t]})},e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(u){if("object"==typeof window)return window}}(),e.o=(u,D)=>Object.prototype.hasOwnProperty.call(u,D),e.r=u=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(u,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(u,"__esModule",{value:!0})};var t={};return(()=>{e.r(t),e.d(t,{AccessMode:()=>u,Drafty:()=>T(),Tinode:()=>V});class u{constructor(D){D&&(this.given="number"==typeof D.given?D.given:u.decode(D.given),this.want="number"==typeof D.want?D.want:u.decode(D.want),this.mode=D.mode?"number"==typeof D.mode?D.mode:u.decode(D.mode):this.given&this.want)}static#u(u,D,e){if(["given","want","mode"].includes(D=D||"mode"))return 0!=(u[D]&e);throw new Error(`Invalid AccessMode component '${D}'`)}static decode(D){if(!D)return null;if("number"==typeof D)return D&u._BITMASK;if("N"===D||"n"===D)return u._NONE;const e={J:u._JOIN,R:u._READ,W:u._WRITE,P:u._PRES,A:u._APPROVE,S:u._SHARE,D:u._DELETE,O:u._OWNER};let t=u._NONE;for(let u=0;u=20&&e.length<=24&&["ts","touched","updated","created","when","deleted","expires"].includes(D)){const u=new Date(e);if(!isNaN(u))return u}else if("acs"===D&&"object"==typeof e)return new u(e);return e}function o(u){return u&&!/^\s*([a-z][a-z0-9+.-]*:|\/\/)/im.test(u)}function c(u){return u instanceof Date&&!isNaN(u)&&0!=u.getTime()}function d(D,e,t){if("object"!=typeof e){if(void 0===e)return D;if(e===s)return;return e}if(null===e)return e;if(e instanceof Date&&!isNaN(e))return!D||!(D instanceof Date)||isNaN(D)||D{"_"==D[0]?delete u[D]:u[D]?Array.isArray(u[D])&&0==u[D].length?delete u[D]:u[D]?u[D]instanceof Date?c(u[D])||delete u[D]:"object"==typeof u[D]&&(h(u[D]),0==Object.getOwnPropertyNames(u[D]).length&&delete u[D]):delete u[D]:delete u[D]})),u}let _,p;const f="Connection failed",g=418,m="Disconnected by client";function y(u,D,e,t){let C=null;return["http","https","ws","wss"].includes(D)&&(C=`${D}://${u}`,"/"!==C.charAt(C.length-1)&&(C+="/"),C+="v"+e+"/channels",["http","https"].includes(D)&&(C+="/lp"),C+="?apikey="+t),C}class b{static#D=u=>{};#e=null;#t=0;#C=!1;#F=null;host;secure;apiKey;version;autoreconnect;initialized;constructor(u,D,e){if(this.host=u.host,this.secure=u.secure,this.apiKey=u.apiKey,this.version=D,this.autoreconnect=e,"lp"===u.transport?(this.#A(),this.initialized="lp"):"ws"===u.transport&&(this.#E(),this.initialized="ws"),!this.initialized)throw b.#D("Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'."),new Error("Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.")}static setNetworkProviders(u,D){_=u,p=D}static set logger(u){b.#D=u}connect(u,D){return Promise.reject(null)}reconnect(u){}disconnect(){}sendText(u){}isConnected(){return!1}transport(){return this.initialized}probe(){this.sendText("1")}backoffReset(){this.#r()}#n(){clearTimeout(this.#e);const u=Math.pow(2,this.#t)*(1+.3*Math.random())*2e3;this.#t=this.#t>=10?this.#t:this.#t+1,this.onAutoreconnectIteration&&this.onAutoreconnectIteration(u),this.#e=setTimeout((D=>{if(b.#D(`Reconnecting, iter=${this.#t}, timeout=${u}`),this.#C)this.onAutoreconnectIteration&&this.onAutoreconnectIteration(-1);else{const u=this.connect();this.onAutoreconnectIteration?this.onAutoreconnectIteration(0,u):u.catch((u=>{}))}}),u)}#i(){clearTimeout(this.#e),this.#e=null}#r(){this.#t=0}#A(){let u=null,D=null,e=null,t=(D,e,C)=>{let F=new p,A=!1;return F.onreadystatechange=E=>{if(4==F.readyState)if(201==F.status){let C=JSON.parse(F.responseText,B);u=D+"&sid="+C.ctrl.params.sid,F=t(u),F.send(null),this.onOpen&&this.onOpen(),e&&(A=!0,e()),this.autoreconnect&&this.#i()}else if(F.status>0&&F.status<400)this.onMessage&&this.onMessage(F.responseText),F=t(u),F.send(null);else{if(C&&!A&&(A=!0,C(F.responseText)),this.onMessage&&F.responseText&&this.onMessage(F.responseText),this.onDisconnect){const u=F.status||(this.#C?g:503),D=F.responseText||(this.#C?m:f);this.onDisconnect(new a(D,u),u)}F=null,!this.#C&&this.autoreconnect&&this.#n()}},F.open("POST",D,!0),F};this.connect=(u,e)=>{if(this.#C=!1,D){if(!e)return Promise.resolve();D.onreadystatechange=void 0,D.abort(),D=null}return u&&(this.host=u),new Promise(((u,e)=>{const C=y(this.host,this.secure?"https":"http",this.version,this.apiKey);b.#D("LP connecting to:",C),D=t(C,u,e),D.send(null)})).catch((u=>{b.#D("LP connection failed:",u)}))},this.reconnect=u=>{this.#i(),this.connect(null,u)},this.disconnect=t=>{this.#C=!0,this.#i(),e&&(e.onreadystatechange=void 0,e.abort(),e=null),D&&(D.onreadystatechange=void 0,D.abort(),D=null),this.onDisconnect&&this.onDisconnect(new a(m,g),g),u=null},this.sendText=D=>{if(e=(u=>{const D=new p;return D.onreadystatechange=u=>{if(4==D.readyState&&D.status>=400)throw new a("LP sender failed",D.status)},D.open("POST",u,!0),D})(u),!e||1!=e.readyState)throw new Error("Long poller failed to connect");e.send(D)},this.isConnected=u=>D&&!0}#E(){this.connect=(u,D)=>{if(this.#C=!1,this.#F){if(!D&&this.#F.readyState==this.#F.OPEN)return Promise.resolve();this.#F.close(),this.#F=null}return u&&(this.host=u),new Promise(((u,D)=>{const e=y(this.host,this.secure?"wss":"ws",this.version,this.apiKey);b.#D("WS connecting to: ",e);const t=new _(e);t.onerror=u=>{D(u)},t.onopen=D=>{this.autoreconnect&&this.#i(),this.onOpen&&this.onOpen(),u()},t.onclose=u=>{if(this.#F=null,this.onDisconnect){const u=this.#C?g:503;this.onDisconnect(new a(this.#C?m:f,u),u)}!this.#C&&this.autoreconnect&&this.#n()},t.onmessage=u=>{this.onMessage&&this.onMessage(u.data)},this.#F=t}))},this.reconnect=u=>{this.#i(),this.connect(null,u)},this.disconnect=u=>{this.#C=!0,this.#i(),this.#F&&(this.#F.close(),this.#F=null)},this.sendText=u=>{if(!this.#F||this.#F.readyState!=this.#F.OPEN)throw new Error("Websocket is not connected");this.#F.send(u)},this.isConnected=u=>this.#F&&this.#F.readyState==this.#F.OPEN}onMessage=void 0;onDisconnect=void 0;onOpen=void 0;onAutoreconnectIteration=void 0}b.NETWORK_ERROR=503,b.NETWORK_ERROR_TEXT=f,b.NETWORK_USER=g,b.NETWORK_USER_TEXT=m;const w="tinode-web";let v;class S{#s=u=>{};#a=u=>{};db=null;disabled=!0;constructor(u,D){this.#s=u||this.#s,this.#a=D||this.#a}#B(u,D,e){return this.db?new Promise(((t,C)=>{const F=this.db.transaction([u]);F.onerror=D=>{this.#a("PCache","mapObjects",u,D.target.error),C(D.target.error)},F.objectStore(u).getAll().onsuccess=u=>{D&&u.target.result.forEach((u=>{D.call(e,u)})),t(u.target.result)}})):disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"))}initDatabase(){return new Promise(((u,D)=>{const e=v.open(w,1);e.onsuccess=D=>{this.db=D.target.result,this.disabled=!1,u(this.db)},e.onerror=u=>{this.#a("PCache","failed to initialize",u),D(u.target.error),this.#s(u.target.error)},e.onupgradeneeded=u=>{this.db=u.target.result,this.db.onerror=u=>{this.#a("PCache","failed to create storage",u),this.#s(u.target.error)},this.db.createObjectStore("topic",{keyPath:"name"}),this.db.createObjectStore("user",{keyPath:"uid"}),this.db.createObjectStore("subscription",{keyPath:["topic","uid"]}),this.db.createObjectStore("message",{keyPath:["topic","seq"]})}}))}deleteDatabase(){return this.db&&(this.db.close(),this.db=null),new Promise(((u,D)=>{const e=v.deleteDatabase(w);e.onblocked=u=>{this.db&&this.db.close();const e=new Error("blocked");this.#a("PCache","deleteDatabase",e),D(e)},e.onsuccess=D=>{this.db=null,this.disabled=!0,u(!0)},e.onerror=u=>{this.#a("PCache","deleteDatabase",u.target.error),D(u.target.error)}}))}isReady(){return!!this.db}updTopic(u){return this.isReady()?new Promise(((D,e)=>{const t=this.db.transaction(["topic"],"readwrite");t.oncomplete=u=>{D(u.target.result)},t.onerror=u=>{this.#a("PCache","updTopic",u.target.error),e(u.target.error)};const C=t.objectStore("topic").get(u.name);C.onsuccess=D=>{t.objectStore("topic").put(S.#o(C.result,u)),t.commit()}})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}markTopicAsDeleted(u,D){return this.isReady()?new Promise(((e,t)=>{const C=this.db.transaction(["topic"],"readwrite");C.oncomplete=u=>{e(u.target.result)},C.onerror=u=>{this.#a("PCache","markTopicAsDeleted",u.target.error),t(u.target.error)};C.objectStore("topic").get(u).onsuccess=u=>{const e=u.target.result;e&&e._deleted!=D&&(e._deleted=D,C.objectStore("topic").put(e)),C.commit()}})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remTopic(u){return this.isReady()?new Promise(((D,e)=>{const t=this.db.transaction(["topic","subscription","message"],"readwrite");t.oncomplete=u=>{D(u.target.result)},t.onerror=u=>{this.#a("PCache","remTopic",u.target.error),e(u.target.error)},t.objectStore("topic").delete(IDBKeyRange.only(u)),t.objectStore("subscription").delete(IDBKeyRange.bound([u,"-"],[u,"~"])),t.objectStore("message").delete(IDBKeyRange.bound([u,0],[u,Number.MAX_SAFE_INTEGER])),t.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapTopics(u,D){return this.#B("topic",u,D)}deserializeTopic(u,D){S.#c(u,D)}updUser(u,D){if(!(arguments.length<2||void 0===D))return this.isReady()?new Promise(((e,t)=>{const C=this.db.transaction(["user"],"readwrite");C.oncomplete=u=>{e(u.target.result)},C.onerror=u=>{this.#a("PCache","updUser",u.target.error),t(u.target.error)},C.objectStore("user").put({uid:u,public:D}),C.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remUser(u){return this.isReady()?new Promise(((D,e)=>{const t=this.db.transaction(["user"],"readwrite");t.oncomplete=u=>{D(u.target.result)},t.onerror=u=>{this.#a("PCache","remUser",u.target.error),e(u.target.error)},t.objectStore("user").delete(IDBKeyRange.only(u)),t.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapUsers(u,D){return this.#B("user",u,D)}getUser(u){return this.isReady()?new Promise(((D,e)=>{const t=this.db.transaction(["user"]);t.oncomplete=u=>{const e=u.target.result;D({user:e.uid,public:e.public})},t.onerror=u=>{this.#a("PCache","getUser",u.target.error),e(u.target.error)},t.objectStore("user").get(u)})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updSubscription(u,D,e){return this.isReady()?new Promise(((t,C)=>{const F=this.db.transaction(["subscription"],"readwrite");F.oncomplete=u=>{t(u.target.result)},F.onerror=u=>{this.#a("PCache","updSubscription",u.target.error),C(u.target.error)},F.objectStore("subscription").get([u,D]).onsuccess=t=>{F.objectStore("subscription").put(S.#d(t.target.result,u,D,e)),F.commit()}})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapSubscriptions(u,D,e){return this.isReady()?new Promise(((t,C)=>{const F=this.db.transaction(["subscription"]);F.onerror=u=>{this.#a("PCache","mapSubscriptions",u.target.error),C(u.target.error)},F.objectStore("subscription").getAll(IDBKeyRange.bound([u,"-"],[u,"~"])).onsuccess=u=>{D&&u.target.result.forEach((u=>{D.call(e,u)})),t(u.target.result)}})):this.disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"))}addMessage(u){return this.isReady()?new Promise(((D,e)=>{const t=this.db.transaction(["message"],"readwrite");t.onsuccess=u=>{D(u.target.result)},t.onerror=u=>{this.#a("PCache","addMessage",u.target.error),e(u.target.error)},t.objectStore("message").add(S.#l(null,u)),t.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updMessageStatus(u,D,e){return this.isReady()?new Promise(((t,C)=>{const F=this.db.transaction(["message"],"readwrite");F.onsuccess=u=>{t(u.target.result)},F.onerror=u=>{this.#a("PCache","updMessageStatus",u.target.error),C(u.target.error)};const A=F.objectStore("message").get(IDBKeyRange.only([u,D]));A.onsuccess=t=>{const C=A.result||t.target.result;C&&C._status!=e?(F.objectStore("message").put(S.#l(C,{topic:u,seq:D,_status:e})),F.commit()):F.commit()}})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remMessages(u,D,e){return this.isReady()?new Promise(((t,C)=>{D||e||(D=0,e=Number.MAX_SAFE_INTEGER);const F=e>0?IDBKeyRange.bound([u,D],[u,e],!1,!0):IDBKeyRange.only([u,D]),A=this.db.transaction(["message"],"readwrite");A.onsuccess=u=>{t(u.target.result)},A.onerror=u=>{this.#a("PCache","remMessages",u.target.error),C(u.target.error)},A.objectStore("message").delete(F),A.commit()})):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}readMessages(u,D,e,t){return this.isReady()?new Promise(((C,F)=>{const A=(D=D||{}).since>0?D.since:0,E=D.before>0?D.before:Number.MAX_SAFE_INTEGER,r=0|D.limit,n=[],i=IDBKeyRange.bound([u,A],[u,E],!1,!0),s=this.db.transaction(["message"]);s.onerror=u=>{this.#a("PCache","readMessages",u.target.error),F(u.target.error)},s.objectStore("message").openCursor(i,"prev").onsuccess=u=>{const D=u.target.result;D?(e&&e.call(t,D.value),n.push(D.value),r<=0||n.length{D.hasOwnProperty(e)&&(u[e]=D[e])})),Array.isArray(D.tags)&&(u._tags=D.tags),D.acs&&u.setAccessMode(D.acs),u.seq|=0,u.read|=0,u.unread=Math.max(0,u.seq-u.read)}static#o(u,D){const e=u||{name:D.name};return S.#h.forEach((u=>{D.hasOwnProperty(u)&&(e[u]=D[u])})),Array.isArray(D._tags)&&(e.tags=D._tags),D.acs&&(e.acs=D.getAccessMode().jsonHelper()),e}static#d(u,D,e,t){const C=u||{topic:D,uid:e};return["updated","mode","read","recv","clear","lastSeen","userAgent"].forEach((u=>{t.hasOwnProperty(u)&&(C[u]=t[u])})),C}static#l(u,D){const e=u||{};return["topic","seq","ts","_status","from","head","content"].forEach((u=>{D.hasOwnProperty(u)&&(e[u]=D[u])})),e}static setDatabaseProvider(u){v=u}}e(60);var M=e(672),T=e.n(M);let x,P,k,R;class N{constructor(u,D){this._tinode=u,this._version=D,this._apiKey=u._apiKey,this._authToken=u.getAuthToken(),this.xhr=[]}uploadWithBaseUrl(u,D,e,t,C,F){let A=`/v${this._version}/file/u/`;if(u){let D=u;if(D.endsWith("/")&&(D=D.slice(0,-1)),!D.startsWith("http://")&&!D.startsWith("https://"))throw new Error(`Invalid base URL '${u}'`);A=D+A}const E=this,r=new x;this.xhr.push(r),r.open("POST",A,!0),r.setRequestHeader("X-Tinode-APIKey",this._apiKey),this._authToken&&r.setRequestHeader("X-Tinode-Auth",`Token ${this._authToken.token}`);let n=null,i=null;const s=new Promise(((u,D)=>{n=u,i=D}));r.upload.onprogress=u=>{u.lengthComputable&&(t&&t(u.loaded/u.total),this.onProgress&&this.onProgress(u.loaded/u.total))},r.onload=function(){let u;try{u=JSON.parse(this.response,B)}catch(D){E._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.response),u={ctrl:{code:this.status,text:this.statusText}}}this.status>=200&&this.status<300?(n&&n(u.ctrl.params.url),C&&C(u.ctrl)):this.status>=400?(i&&i(new a(u.ctrl.text,u.ctrl.code)),F&&F(u.ctrl)):E._tinode.logger("ERROR: Unexpected server response status",this.status,this.response)},r.onerror=function(u){i&&i(u||new Error("failed")),F&&F(null)},r.onabort=function(u){i&&i(new Error("upload cancelled by user")),F&&F(null)};try{const u=new FormData;u.append("file",D),u.set("id",this._tinode.getNextUniqueId()),e&&u.set("topic",e),r.send(u)}catch(u){i&&i(u),F&&F(null)}return s}upload(u,D,e,t,C){const F=(this._tinode._secure?"https://":"http://")+this._tinode._host;return this.uploadWithBaseUrl(F,u,D,e,t,C)}download(u,D,e,t,C){if(!o(u))return void(C&&C(`The URL '${u}' must be relative, not absolute`));if(!this._authToken)return void(C&&C("Must authenticate first"));const F=this,A=new x;this.xhr.push(A),u=function(u,D,e){const t=new URL(u,window.location.origin);return t.searchParams.append(D,e),t.toString().substring(window.location.origin.length)}(u,"asatt","1"),A.open("GET",u,!0),A.setRequestHeader("X-Tinode-APIKey",this._apiKey),A.setRequestHeader("X-Tinode-Auth","Token "+this._authToken.token),A.responseType="blob",A.onprogress=function(u){t&&t(u.loaded)};let E=null,r=null;const n=new Promise(((u,D)=>{E=u,r=D}));A.onload=function(){if(200==this.status){const u=document.createElement("a");u.href=window.URL.createObjectURL(new Blob([this.response],{type:e})),u.style.display="none",u.setAttribute("download",D),document.body.appendChild(u),u.click(),document.body.removeChild(u),window.URL.revokeObjectURL(u.href),E&&E()}else if(this.status>=400&&r){const u=new FileReader;u.onload=function(){try{const u=JSON.parse(this.result,B);r(new a(u.ctrl.text,u.ctrl.code))}catch(u){F._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.result),r(u)}},u.readAsText(this.response)}},A.onerror=function(u){r&&r(new Error("failed")),C&&C(u)},A.onabort=function(){r&&r(null)};try{A.send()}catch(u){r&&r(u),C&&C(u)}return n}cancel(){this.xhr.forEach((u=>{u.readyState<4&&u.abort()}))}static setNetworkProvider(u){x=u}}class I{constructor(u){this.topic=u,this.what={}}#_(){return this.topic._deleted?void 0:this.topic.updated}#p(){return this.topic.isP2PType()?this.#_():this.topic._deleted?void 0:this.topic._lastSubsUpdate}withData(u,D,e){return this.what.data={since:u,before:D,limit:e},this}withLaterData(u){return this.withData(this.topic._maxSeq>0?this.topic._maxSeq+1:void 0,void 0,u)}withEarlierData(u){return this.withData(void 0,this.topic._minSeq>0?this.topic._minSeq:void 0,u)}withDesc(u){return this.what.desc={ims:u},this}withLaterDesc(){return this.withDesc(this.#_())}withSub(u,D,e){const t={ims:u,limit:D};return"me"==this.topic.getType()?t.topic=e:t.user=e,this.what.sub=t,this}withOneSub(u,D){return this.withSub(u,void 0,D)}withLaterOneSub(u){return this.withOneSub(this.topic._lastSubsUpdate,u)}withLaterSub(u){return this.withSub(this.#p(),u)}withTags(){return this.what.tags=!0,this}withCred(){return"me"==this.topic.getType()?this.what.cred=!0:this.topic._tinode.logger("ERROR: Invalid topic type for MetaGetBuilder:withCreds",this.topic.getType()),this}withDel(u,D){return(u||D)&&(this.what.del={since:u,limit:D}),this}withLaterDel(u){return this.withDel(this.topic._maxSeq>0?this.topic._maxDel+1:void 0,u)}extract(u){return this.what[u]}build(){const u=[];let D={};return["data","sub","desc","tags","cred","del"].forEach((e=>{this.what.hasOwnProperty(e)&&(u.push(e),Object.getOwnPropertyNames(this.what[e]).length>0&&(D[e]=this.what[e]))})),u.length>0?D.what=u.join(" "):D=void 0,D}}class L{#f=void 0;#g=!1;buffer=[];constructor(u,D){this.#f=u||((u,D)=>u===D?0:u0)){E=!0;break}C=F-1}return E?{idx:F,exact:!0}:e?{idx:-1}:{idx:A<0?F+1:F}}#y(u,D){const e=this.#m(u,D,!1),t=e.exact&&this.#g?1:0;return D.splice(e.idx,t,u),D}getAt(u){return this.buffer[u]}getLast(u){return u|=0,this.buffer.length>u?this.buffer[this.buffer.length-1-u]:void 0}put(){let u;u=1==arguments.length&&Array.isArray(arguments[0])?arguments[0]:arguments;for(let D in u)this.#y(u[D],this.buffer)}delAt(u){u|=0;let D=this.buffer.splice(u,1);if(D&&D.length>0)return D[0]}delRange(u,D){return this.buffer.splice(u,D-u)}length(){return this.buffer.length}reset(){this.buffer=[]}forEach(u,D,e,t){D|=0,e=e||this.buffer.length;for(let C=D;CD?this.buffer[C-1]:void 0,Cu.seq-D.seq),!0),this._attached=!1,this._lastSubsUpdate=new Date(0),this._new=!0,this._deleted=!1,this._delayedLeaveTimer=null,e&&(this.onData=e.onData,this.onMeta=e.onMeta,this.onPres=e.onPres,this.onInfo=e.onInfo,this.onMetaDesc=e.onMetaDesc,this.onMetaSub=e.onMetaSub,this.onSubsUpdated=e.onSubsUpdated,this.onTagsUpdated=e.onTagsUpdated,this.onCredsUpdated=e.onCredsUpdated,this.onDeleteTopic=e.onDeleteTopic,this.onAllMessagesReceived=e.onAllMessagesReceived)}static topicType(u){return{me:E,fnd:r,grp:n,new:n,nch:n,chn:n,usr:"p2p",sys:"sys"}["string"==typeof u?u.substring(0,3):"xxx"]}static isMeTopicName(u){return O.topicType(u)==E}static isGroupTopicName(u){return O.topicType(u)==n}static isP2PTopicName(u){return"p2p"==O.topicType(u)}static isCommTopicName(u){return O.isP2PTopicName(u)||O.isGroupTopicName(u)}static isNewGroupTopicName(u){return"string"==typeof u&&(u.substring(0,3)==F||u.substring(0,3)==A)}static isChannelTopicName(u){return"string"==typeof u&&("chn"==u.substring(0,3)||u.substring(0,3)==A)}isSubscribed(){return this._attached}subscribe(u,D){return clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=null,this._attached?Promise.resolve(this):this._tinode.subscribe(this.name||F,u,D).then((u=>{if(u.code>=300)return u;if(this._attached=!0,this._deleted=!1,this.acs=u.params&&u.params.acs?u.params.acs:this.acs,this._new){if(delete this._new,this.name!=u.topic&&(this._cacheDelSelf(),this.name=u.topic),this._cachePutSelf(),this.created=u.ts,this.updated=u.ts,this.name!=E&&this.name!=r){const u=this._tinode.getMeTopic();u.onMetaSub&&u.onMetaSub(this),u.onSubsUpdated&&u.onSubsUpdated([this.name],1)}D&&D.desc&&(D.desc._noForwarding=!0,this._processMetaDesc(D.desc))}return u}))}createMessage(u,D){return this._tinode.createMessage(this.name,u,D)}publish(u,D){return this.publishMessage(this.createMessage(u,D))}publishMessage(u){if(!this._attached)return Promise.reject(new Error("Cannot publish on inactive topic"));if(this._sending)return Promise.reject(new Error("The message is already being sent"));u._sending=!0,u._failed=!1;let D=null;return T().hasEntities(u.content)&&(D=[],T().entities(u.content,(u=>{u&&(u.ref&&D.push(u.ref),u.preref&&D.push(u.preref))})),0==D.length&&(D=null)),this._tinode.publishMessage(u,D).then((D=>(u._sending=!1,u.ts=D.ts,this.swapMessageId(u,D.params.seq),this._maybeUpdateMessageVersionsCache(u),this._routeData(u),D))).catch((D=>{this._tinode.logger("WARNING: Message rejected by the server",D),u._sending=!1,u._failed=!0,this.onData&&this.onData()}))}publishDraft(u,D){const e=u.seq||this._getQueuedSeqId();return u._noForwarding||(u._noForwarding=!0,u.seq=e,u.ts=new Date,u.from=this._tinode.getCurrentUserID(),u.noecho=!0,this._messages.put(u),this._tinode._db.addMessage(u),this.onData&&this.onData(u)),(D||Promise.resolve()).then((D=>u._cancelled?{code:300,text:"cancelled"}:this.publishMessage(u))).catch((D=>{throw this._tinode.logger("WARNING: Message draft rejected",D),u._sending=!1,u._failed=!0,u._fatal=D instanceof a&&(D.code>=400&&D.code<500),this.onData&&this.onData(),D}))}leave(u){return this._attached||u?this._tinode.leave(this.name,u).then((D=>(this._resetSub(),u&&this._gone(),D))):Promise.reject(new Error("Cannot leave inactive topic"))}leaveDelayed(u,D){clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=setTimeout((D=>{this._delayedLeaveTimer=null,this.leave(u)}),D)}getMeta(u){return this._tinode.getMeta(this.name,u)}getMessagesPage(u,D){let e=D?this.startMetaQuery().withLaterData(u):this.startMetaQuery().withEarlierData(u);return this._loadMessages(this._tinode._db,e.extract("data")).then((t=>{if(t==u)return Promise.resolve({topic:this.name,code:200,params:{count:t}});u-=t,e=D?this.startMetaQuery().withLaterData(u):this.startMetaQuery().withEarlierData(u);let C=this.getMeta(e.build());return D||(C=C.then((u=>{u&&u.params&&!u.params.count&&(this._noEarlierMsgs=!0)}))),C}))}setMeta(u){return u.tags&&(u.tags=function(u){let D=[];if(Array.isArray(u)){for(let e=0,t=u.length;e1&&D.push(t))}D.sort().filter((function(u,D,e){return!D||u!=e[D-1]}))}return 0==D.length&&D.push(s),D}(u.tags)),this._tinode.setMeta(this.name,u).then((D=>(D&&D.code>=300||(u.sub&&(u.sub.topic=this.name,D.params&&D.params.acs&&(u.sub.acs=D.params.acs,u.sub.updated=D.ts),u.sub.user||(u.sub.user=this._tinode.getCurrentUserID(),u.desc||(u.desc={})),u.sub._noForwarding=!0,this._processMetaSubs([u.sub])),u.desc&&(D.params&&D.params.acs&&(u.desc.acs=D.params.acs,u.desc.updated=D.ts),this._processMetaDesc(u.desc)),u.tags&&this._processMetaTags(u.tags),u.cred&&this._processMetaCreds([u.cred],!0)),D)))}updateMode(u,D){const e=u?this.subscriber(u):null,t=e?e.acs.updateGiven(D).getGiven():this.getAccessMode().updateWant(D).getWant();return this.setMeta({sub:{user:u,mode:t}})}invite(u,D){return this.setMeta({sub:{user:u,mode:D}})}archive(u){return this.private&&!this.private.arch==!u?Promise.resolve(u):this.setMeta({desc:{private:{arch:!!u||s}}})}delMessages(u,D){if(!this._attached)return Promise.reject(new Error("Cannot delete messages in inactive topic"));u.sort(((u,D)=>u.low=D.hi)));let e,t=u.reduce(((u,D)=>(D.low0?this._tinode.delMessages(this.name,t,D):Promise.resolve({params:{del:0}}),e.then((D=>(D.params.del>this._maxDel&&(this._maxDel=D.params.del),u.forEach((u=>{u.hi?this.flushMessageRange(u.low,u.hi):this.flushMessage(u.low)})),this.onData&&this.onData(),D)))}delMessagesAll(u){return!this._maxSeq||this._maxSeq<=0?Promise.resolve():this.delMessages([{low:1,hi:this._maxSeq+1,_all:!0}],u)}delMessagesList(u,D){u.sort(((u,D)=>u-D));let e=u.reduce(((u,D)=>{if(0==u.length)u.push({low:D});else{let e=u[u.length-1];!e.hi&&D!=e.low+1||D>e.hi?u.push({low:D}):e.hi=e.hi?Math.max(e.hi,D+1):D+1}return u}),[]);return this.delMessages(e,D)}delMessagesEdits(u,D){const e=[u];return this.messageVersions(u,(u=>e.push(u.seq))),this.delMessagesList(e,D)}delTopic(u){return this._deleted?(this._gone(),Promise.resolve(null)):this._tinode.delTopic(this.name,u).then((u=>(this._deleted=!0,this._resetSub(),this._gone(),u)))}delSubscription(u){return this._attached?this._tinode.delSubscription(this.name,u).then((D=>(delete this._users[u],this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._users)),D))):Promise.reject(new Error("Cannot delete subscription in inactive topic"))}note(u,D){if(!this._attached)return;const e=this._users[this._tinode.getCurrentUserID()];let t=!1;if(e?(!e[u]||e[u]0&&this.note("read",u)}noteKeyPress(){this._attached?this._tinode.noteKeyPress(this.name):this._tinode.logger("INFO: Cannot send notification in inactive topic")}noteRecording(u){this._attached?this._tinode.noteKeyPress(this.name,u?"kpa":"kpv"):this._tinode.logger("INFO: Cannot send notification in inactive topic")}videoCall(u,D,e){if(this._attached||["ringing","hang-up"].includes(u))return this._tinode.videoCall(this.name,D,u,e)}_updateMyReadRecv(u,D,e){let t,C=!1;switch(D|=0,this.seq=0|this.seq,this.read=0|this.read,this.recv=0|this.recv,u){case"recv":t=this.recv,this.recv=Math.max(this.recv,D),C=t!=this.recv;break;case"read":t=this.read,this.read=Math.max(this.read,D),C=t!=this.read;break;case"msg":t=this.seq,this.seq=Math.max(this.seq,D),(!this.touched||this.touched{if(this._isReplacementMsg(u))return;const F=this.latestMsgVersion(u.seq)||u;F._origTs||(F._origTs=F.ts,F._origSeq=F.seq,F.ts=u.ts,F.seq=u.seq),D.push({data:F,idx:C})}),u,F,{}),D.forEach(((u,e)=>{C.call(t,u.data,e>0?D[e-1].data:void 0,e=0)return this._messages.getAt(D)}latestMessage(){return this._messages.getLast()}latestMsgVersion(u){const D=this._messageVersions[u];return D?D.getLast():null}maxMsgSeq(){return this._maxSeq}minMsgSeq(){return this._minSeq}maxClearId(){return this._maxDel}messageCount(){return this._messages.length()}queuedMessages(u,D){if(!u)throw new Error("Callback must be provided");this.messages(u,i,void 0,D)}msgReceiptCount(u,D){let e=0;if(D>0){const t=this._tinode.getCurrentUserID();for(let C in this._users){const F=this._users[C];F.user!==t&&F[u]>=D&&e++}}return e}msgReadCount(u){return this.msgReceiptCount("read",u)}msgRecvCount(u){return this.msgReceiptCount("recv",u)}msgHasMoreMessages(u){return u?this.seq>this._maxSeq:this._minSeq>1&&!this._noEarlierMsgs}isNewMessage(u){return this._maxSeq<=u}flushMessage(u){const D=this._messages.find({seq:u});if(delete this._messageVersions[u],D>=0)return this._tinode._db.remMessages(this.name,u),this._messages.delAt(D)}flushMessageRange(u,D){this._tinode._db.remMessages(this.name,u,D);for(let e=u;e=0?this._messages.delRange(e,this._messages.find({seq:D},!0)):[]}swapMessageId(u,D){const e=this._messages.find(u),t=this._messages.length();0<=e&&e=0){const e=this._messages.getAt(D),t=this.msgStatus(e);if(10==t||30==t||40==t)return this._tinode._db.remMessages(this.name,u),e._cancelled=!0,this._messages.delAt(D),this.onData&&this.onData(),!0}return!1}getType(){return O.topicType(this.name)}getAccessMode(){return this.acs}setAccessMode(D){return this.acs=new u(D)}getDefaultAccess(){return this.defacs}startMetaQuery(){return new I(this)}isArchived(){return this.private&&!!this.private.arch}isMeType(){return O.isMeTopicName(this.name)}isChannelType(){return O.isChannelTopicName(this.name)}isGroupType(){return O.isGroupTopicName(this.name)}isP2PType(){return O.isP2PTopicName(this.name)}isCommType(){return O.isCommTopicName(this.name)}msgStatus(u,D){let e=0;return this._tinode.isMe(u.from)?u._sending?e=20:u._fatal||u._cancelled?e=40:u._failed?e=30:u.seq>=i?e=10:this.msgReadCount(u.seq)>0?e=70:this.msgRecvCount(u.seq)>0?e=60:u.seq>0&&(e=50):e=80,D&&u._status!=e&&(u._status=e,this._tinode._db.updMessageStatus(this.name,u.seq,e)),e}_isReplacementMsg(u){return u.head&&u.head.replace}_maybeUpdateMessageVersionsCache(u){if(!this._isReplacementMsg(u))return void(this._messageVersions[u.seq]&&(this._messageVersions[u.seq].filter((D=>D.from==u.from)),this._messageVersions[u.seq].isEmpty()&&delete this._messageVersions[u.seq]));const D=parseInt(u.head.replace.split(":")[1]);if(D>u.seq)return;const e=this.findMessage(D);if(e&&e.from!=u.from)return;const t=this._messageVersions[D]||new L(((u,D)=>u.seq-D.seq),!0);t.put(u),this._messageVersions[D]=t}_routeData(u){u.content&&(!this.touched||this.touchedthis._maxSeq&&(this._maxSeq=u.seq,this.msgStatus(u,!0),clearTimeout(this._recvNotificationTimer),this._recvNotificationTimer=setTimeout((u=>{this._recvNotificationTimer=null,this.noteRecv(this._maxSeq)}),100)),(u.seq0&&this._processMetaSubs(u.sub),u.del&&this._processDelMessages(u.del.clear,u.del.delseq),u.tags&&this._processMetaTags(u.tags),u.cred&&this._processMetaCreds(u.cred),this.onMeta&&this.onMeta(u)}_routePres(D){let e,t;switch(D.what){case"del":this._processDelMessages(D.clear,D.delseq);break;case"on":case"off":e=this._users[D.src],e?e.online="on"==D.what:this._tinode.logger("WARNING: Presence update for an unknown user",this.name,D.src);break;case"term":this._resetSub();break;case"upd":D.src&&!this._tinode.isTopicCached(D.src)&&this.getMeta(this.startMetaQuery().withOneSub(void 0,D.src).build());break;case"acs":if(t=D.src||this._tinode.getCurrentUserID(),e=this._users[t],e)e.acs.updateAll(D.dacs),this._processMetaSubs([{user:t,updated:new Date,acs:e.acs}]);else{const C=(new u).updateAll(D.dacs);C&&C.mode!=u._NONE&&(e=this._cacheGetUser(t),e?e.acs=C:(e={user:t,acs:C},this.getMeta(this.startMetaQuery().withOneSub(void 0,t).build())),e.updated=new Date,this._processMetaSubs([e]))}break;default:this._tinode.logger("INFO: Ignored presence update",D.what)}this.onPres&&this.onPres(D)}_routeInfo(u){switch(u.what){case"recv":case"read":const D=this._users[u.from];D&&(D[u.what]=u.seq,D.recv0&&this.onData&&this.onData()}_allMessagesReceived(u){this.onAllMessagesReceived&&this.onAllMessagesReceived(u)}_resetSub(){this._attached=!1}_gone(){this._messages.reset(),this._tinode._db.remMessages(this.name),this._users={},this.acs=new u(null),this.private=null,this.public=null,this.trusted=null,this._maxSeq=0,this._minSeq=0,this._attached=!1;const D=this._tinode.getMeTopic();D&&D._routePres({_noForwarding:!0,what:"gone",topic:E,src:this.name}),this.onDeleteTopic&&this.onDeleteTopic()}_updateCachedUser(u,D){let e=this._cacheGetUser(u);return e=d(e||{},D),this._cachePutUser(u,e),l(this._users,u,e)}_getQueuedSeqId(){return this._queuedSeqId++}_loadMessages(u,D){const{since:e,before:t,limit:C}=D||{};return u.readMessages(this.name,{since:e,before:t,limit:C||24}).then((u=>(u.forEach((u=>{u.seq>this._maxSeq&&(this._maxSeq=u.seq),(u.seq{u.online&&(u.online=!1,u.seen=Object.assign(u.seen||{},{when:new Date}),this._refreshContact("off",u))})),this.onMetaDesc&&this.onMetaDesc(this)}_processMetaSubs(u){let D=0;if(u.forEach((u=>{const e=u.topic;if(e==r||e==E)return;u.online=!!u.online;let t=null;if(u.deleted)t=u,this._tinode.cacheRemTopic(e),this._tinode._db.remTopic(e);else{void 0!==u.seq&&(u.seq=0|u.seq,u.recv=0|u.recv,u.read=0|u.read,u.unread=u.seq-u.read);const D=this._tinode.getTopic(e);D._new&&delete D._new,t=d(D,u),this._tinode._db.updTopic(t),O.isP2PTopicName(e)&&(this._cachePutUser(e,t),this._tinode._db.updUser(e,t.public)),!u._noForwarding&&D&&(u._noForwarding=!0,D._processMetaDesc(u))}D++,this.onMetaSub&&this.onMetaSub(t)})),this.onSubsUpdated&&D>0){const e=[];u.forEach((u=>{e.push(u.topic)})),this.onSubsUpdated(e,D)}}_processMetaCreds(u,D){1==u.length&&u[0]==s&&(u=[]),D?u.forEach((u=>{if(u.val){let D=this._credentials.findIndex((D=>D.meth==u.meth&&D.val==u.val));D<0?(u.done||(D=this._credentials.findIndex((D=>D.meth==u.meth&&!D.done)),D>=0&&this._credentials.splice(D,1)),this._credentials.push(u)):this._credentials[D].done=u.done}else if(u.resp){const D=this._credentials.findIndex((D=>D.meth==u.meth&&!D.done));D>=0&&(this._credentials[D].done=!0)}})):this._credentials=u,this.onCredsUpdated&&this.onCredsUpdated(this._credentials)}_routePres(D){if("term"==D.what)return void this._resetSub();if("upd"==D.what&&D.src==E)return void this.getMeta(this.startMetaQuery().withDesc().build());const e=this._tinode.cacheGetTopic(D.src);if(e){switch(D.what){case"on":e.online=!0;break;case"off":e.online&&(e.online=!1,e.seen=Object.assign(e.seen||{},{when:new Date}));break;case"msg":e._updateReceived(D.seq,D.act);break;case"upd":this.getMeta(this.startMetaQuery().withLaterOneSub(D.src).build());break;case"acs":D.tgt||(e.acs?e.acs.updateAll(D.dacs):e.acs=(new u).updateAll(D.dacs),e.touched=new Date);break;case"ua":e.seen={when:new Date,ua:D.ua};break;case"recv":D.seq=0|D.seq,e.recv=e.recv?Math.max(e.recv,D.seq):D.seq;break;case"read":D.seq=0|D.seq,e.read=e.read?Math.max(e.read,D.seq):D.seq,e.recv=e.recv?Math.max(e.read,e.recv):e.recv,e.unread=e.seq-e.read;break;case"gone":this._tinode.cacheRemTopic(D.src),e._deleted?this._tinode._db.remTopic(D.src):(e._deleted=!0,e._attached=!1,this._tinode._db.markTopicAsDeleted(D.src,!0));break;case"del":break;default:this._tinode.logger("INFO: Unsupported presence update in 'me'",D.what)}this._refreshContact(D.what,e)}else{if("acs"==D.what){const e=new u(D.dacs);if(!e||e.mode==u._INVALID)return void this._tinode.logger("ERROR: Invalid access mode update",D.src,D.dacs);if(e.mode==u._NONE)return void this._tinode.logger("WARNING: Removing non-existent subscription",D.src,D.dacs);{this.getMeta(this.startMetaQuery().withOneSub(void 0,D.src).build());const u=this._tinode.getTopic(D.src);u.online=!1,u.acs=e,this._tinode._db.updTopic(u)}}else if("tags"==D.what)this.getMeta(this.startMetaQuery().withTags().build());else if("msg"==D.what){this.getMeta(this.startMetaQuery().withOneSub(void 0,D.src).build());const u=this._tinode.getTopic(D.src);u._deleted=!1,this._tinode._db.updTopic(u)}this._refreshContact(D.what,e)}this.onPres&&this.onPres(D)}_refreshContact(u,D){this.onContactUpdate&&this.onContactUpdate(u,D)}publish(){return Promise.reject(new Error("Publishing to 'me' is not supported"))}delCredential(u,D){return this._attached?this._tinode.delCredential(u,D).then((e=>{const t=this._credentials.findIndex((e=>e.meth==u&&e.val==D));return t>-1&&this._credentials.splice(t,1),this.onCredsUpdated&&this.onCredsUpdated(this._credentials),e})):Promise.reject(new Error("Cannot delete credential in inactive 'me' topic"))}contacts(u,D,e){this._tinode.mapTopics(((t,C)=>{!t.isCommType()||D&&!D(t)||u.call(e,t,C)}))}getContact(u){return this._tinode.cacheGetTopic(u)}getAccessMode(u){if(u){const D=this._tinode.cacheGetTopic(u);return D?D.acs:null}return this.acs}isArchived(u){const D=this._tinode.cacheGetTopic(u);return D&&D.private&&!!D.private.arch}getCredentials(){return this._credentials}}class q extends O{_contacts={};constructor(u){super(r,u)}_processMetaSubs(u){let D=Object.getOwnPropertyNames(this._contacts).length;this._contacts={};for(let e in u){let t=u[e];const C=t.topic?t.topic:t.user;t=l(this._contacts,C,t),D++,this.onMetaSub&&this.onMetaSub(t)}D>0&&this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._contacts))}publish(){return Promise.reject(new Error("Publishing to 'fnd' is not supported"))}setMeta(u){return Object.getPrototypeOf(q.prototype).setMeta.call(this,u).then((u=>{Object.keys(this._contacts).length>0&&(this._contacts={},this.onSubsUpdated&&this.onSubsUpdated([]))}))}contacts(u,D){const e=u||this.onMetaSub;if(e)for(let u in this._contacts)e.call(D,this._contacts[u],u,this._contacts)}}function $(u){return btoa(encodeURIComponent(u).replace(/%([0-9A-F]{2})/g,(function(u,D){return String.fromCharCode("0x"+D)})))}function G(D,e){if(e instanceof Date)e=function(u){if(!c(u))return;const D=function(u,D){return"0".repeat((D=D||2)-(""+u).length)+u},e=u.getUTCMilliseconds();return u.getUTCFullYear()+"-"+D(u.getUTCMonth()+1)+"-"+D(u.getUTCDate())+"T"+D(u.getUTCHours())+":"+D(u.getUTCMinutes())+":"+D(u.getUTCSeconds())+(e?"."+D(e,3):"")+"Z"}(e);else if(e instanceof u)e=e.jsonHelper();else if(null==e||!1===e||Array.isArray(e)&&0==e.length||"object"==typeof e&&0==Object.keys(e).length)return;return e}function j(u,D){return"string"==typeof D&&D.length>128?"<"+D.length+", bytes: "+D.substring(0,12)+"..."+D.substring(D.length-12)+">":G(0,D)}"undefined"!=typeof WebSocket&&(P=WebSocket),"undefined"!=typeof XMLHttpRequest&&(k=XMLHttpRequest),"undefined"!=typeof indexedDB&&(R=indexedDB),function(){const u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";"undefined"==typeof btoa&&(e.g.btoa=function(){let D=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e="";for(let t,C=0,F=0,A=u;D.charAt(0|F)||(A="=",F%1);e+=A.charAt(63&C>>8-F%1*8)){if(t=D.charCodeAt(F+=3/4),t>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");C=C<<8|t}return e});"undefined"==typeof atob&&(e.g.atob=function(){let D=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/=+$/,""),e="";if(D.length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(let t,C=0,F=0,A=0;t=D.charAt(A++);~t&&(F=C%4?64*F+t:t,C++%4)?e+=String.fromCharCode(255&F>>(-2*C&6)):0)t=u.indexOf(t);return e});"undefined"==typeof window&&(e.g.window={WebSocket:P,XMLHttpRequest:k,indexedDB:R,URL:{createObjectURL:function(){throw new Error("Unable to use URL.createObjectURL in a non-browser application")}}});b.setNetworkProviders(P,k),N.setNetworkProvider(k),S.setDatabaseProvider(R)}();class V{_host;_secure;_appName;_apiKey;_browser="";_platform;_hwos="undefined";_humanLanguage="xx";_loggingEnabled=!1;_trimLongStrings=!1;_myUID=null;_authenticated=!1;_login=null;_authToken=null;_inPacketCount=0;_messageId=Math.floor(65535*Math.random()+65535);_serverInfo=null;_deviceToken=null;_pendingPromises={};_expirePromises=null;_connection=null;_persist=!1;_db=null;_cache={};constructor(u,D){if(this._host=u.host,this._secure=u.secure,this._appName=u.appName||"Undefined",this._apiKey=u.apiKey,this._platform=u.platform||"web","undefined"!=typeof navigator&&(this._browser=function(u,D){u=u||"";let e,t="";/reactnative/i.test(D)&&(t="ReactNative; ");let C=(u=u.replace(" (KHTML, like Gecko)","")).match(/(AppleWebKit\/[.\d]+)/i);if(C){const D=["edg","chrome","safari","mobile","version"];let t,F=u.substr(C.index+C[0].length).split(" "),A=[];for(let u=0;ue[1].toLowerCase().startsWith(u)))]),"Version"==e[1]&&(t=e[2]))}A.sort(((u,D)=>u[2]-D[2])),A.length>0?(A[0][0].toLowerCase().startsWith("edg")?A[0][0]="Edge":"OPR"==A[0][0]?A[0][0]="Opera":"Safari"==A[0][0]&&t&&(A[0][1]=t),e=A[0][0]+"/"+A[0][1]):e=C[1]}else/firefox/i.test(u)?(C=/Firefox\/([.\d]+)/g.exec(u),e=C?"Firefox/"+C[1]:"Firefox/?"):(C=/([\w.]+)\/([.\d]+)/.exec(u),C?e=C[1]+"/"+C[2]:(C=u.split(" "),e=C[0]));if(C=e.split("/"),C.length>1){const u=C[1].split("."),D=u[1]?"."+u[1].substr(0,2):"";e=`${C[0]}/${u[0]}${D}`}return t+e}(navigator.userAgent,navigator.product),this._hwos=navigator.platform,this._humanLanguage=navigator.language||"en-US"),b.logger=this.logger,T().logger=this.logger,"lp"!=u.transport&&"ws"!=u.transport&&(u.transport=function(){if("object"==typeof window){if(window.WebSocket)return"ws";if(window.XMLHttpRequest)return"lp"}return null}()),this._connection=new b(u,"0",!0),this._connection.onMessage=u=>{this.#b(u)},this._connection.onOpen=u=>this.#w(),this._connection.onDisconnect=(u,D)=>this.#v(u,D),this._connection.onAutoreconnectIteration=(u,D)=>{this.onAutoreconnectIteration&&this.onAutoreconnectIteration(u,D)},this._persist=u.persist,this._db=new S((u=>{this.logger("DB",u)}),this.logger),this._persist){const u=[];this._db.initDatabase().then((D=>this._db.mapTopics((D=>{let e=this.#S("topic",D.name);e||(e=D.name==E?new U:D.name==r?new q:new O(D.name),this._db.deserializeTopic(e,D),this.#M(e),e._cachePutSelf(),delete e._new,u.push(e._loadMessages(this._db)))})))).then((u=>this._db.mapUsers((u=>{this.#T("user",u.uid,d({},u.public))})))).then((D=>Promise.all(u))).then((u=>{D&&D(),this.logger("Persistent cache initialized.")})).catch((u=>{D&&D(u),this.logger("Failed to initialize persistent cache:",u)}))}else this._db.deleteDatabase().then((u=>{D&&D()}))}logger(u){if(this._loggingEnabled){const C=new Date,F=("0"+C.getUTCHours()).slice(-2)+":"+("0"+C.getUTCMinutes()).slice(-2)+":"+("0"+C.getUTCSeconds()).slice(-2)+"."+("00"+C.getUTCMilliseconds()).slice(-3);for(var D=arguments.length,e=new Array(D>1?D-1:0),t=1;t{this._pendingPromises[u]={resolve:D,reject:e,ts:new Date}}))),D}#P(u,D,e,t){const C=this._pendingPromises[u];C&&(delete this._pendingPromises[u],D>=200&&D<400?C.resolve&&C.resolve(e):C.reject&&C.reject(new a(t,D)))}#k(u,D){let e;D&&(e=this.#x(D)),u=h(u);let t=JSON.stringify(u);this.logger("out: "+(this._trimLongStrings?JSON.stringify(u,j):t));try{this._connection.sendText(t)}catch(u){if(!D)throw u;this.#P(D,b.NETWORK_ERROR,null,u.message)}return e}#b(u){if(!u)return;if(this._inPacketCount++,this.onRawMessage&&this.onRawMessage(u),"0"===u)return void(this.onNetworkProbe&&this.onNetworkProbe());let D=JSON.parse(u,B);D?(this.logger("in: "+(this._trimLongStrings?JSON.stringify(D,j):u)),this.onMessage&&this.onMessage(D),D.ctrl?(this.onCtrlMessage&&this.onCtrlMessage(D.ctrl),D.ctrl.id&&this.#P(D.ctrl.id,D.ctrl.code,D.ctrl,D.ctrl.text),setTimeout((u=>{if(205==D.ctrl.code&&"evicted"==D.ctrl.text){const u=this.#S("topic",D.ctrl.topic);u&&(u._resetSub(),D.ctrl.params&&D.ctrl.params.unsub&&u._gone())}else if(D.ctrl.code<300&&D.ctrl.params)if("data"==D.ctrl.params.what){const u=this.#S("topic",D.ctrl.topic);u&&u._allMessagesReceived(D.ctrl.params.count)}else if("sub"==D.ctrl.params.what){const u=this.#S("topic",D.ctrl.topic);u&&u._processMetaSubs([])}}),0)):setTimeout((u=>{if(D.meta){const u=this.#S("topic",D.meta.topic);u&&u._routeMeta(D.meta),D.meta.id&&this.#P(D.meta.id,200,D.meta,"META"),this.onMetaMessage&&this.onMetaMessage(D.meta)}else if(D.data){const u=this.#S("topic",D.data.topic);u&&u._routeData(D.data),this.onDataMessage&&this.onDataMessage(D.data)}else if(D.pres){const u=this.#S("topic",D.pres.topic);u&&u._routePres(D.pres),this.onPresMessage&&this.onPresMessage(D.pres)}else if(D.info){const u=this.#S("topic",D.info.topic);u&&u._routeInfo(D.info),this.onInfoMessage&&this.onInfoMessage(D.info)}else this.logger("ERROR: Unknown packet received.")}),0)):(this.logger("in: "+u),this.logger("ERROR: failed to parse data"))}#w(){this._expirePromises||(this._expirePromises=setInterval((u=>{const D=new a("timeout",504),e=new Date((new Date).getTime()-5e3);for(let u in this._pendingPromises){let t=this._pendingPromises[u];t&&t.ts{u._resetSub()}));for(let D in this._pendingPromises){const e=this._pendingPromises[D];e&&e.reject&&e.reject(u)}this._pendingPromises={},this.onDisconnect&&this.onDisconnect(u)}#N(){return this._appName+" ("+(this._browser?this._browser+"; ":"")+this._hwos+"); "+C}#I(u,e){switch(u){case"hi":return{hi:{id:this.getNextUniqueId(),ver:D,ua:this.#N(),dev:this._deviceToken,lang:this._humanLanguage,platf:this._platform}};case"acc":return{acc:{id:this.getNextUniqueId(),user:null,scheme:null,secret:null,tmpscheme:null,tmpsecret:null,login:!1,tags:null,desc:{},cred:{}}};case"login":return{login:{id:this.getNextUniqueId(),scheme:null,secret:null}};case"sub":return{sub:{id:this.getNextUniqueId(),topic:e,set:{},get:{}}};case"leave":return{leave:{id:this.getNextUniqueId(),topic:e,unsub:!1}};case"pub":return{pub:{id:this.getNextUniqueId(),topic:e,noecho:!1,head:null,content:{}}};case"get":return{get:{id:this.getNextUniqueId(),topic:e,what:null,desc:{},sub:{},data:{}}};case"set":return{set:{id:this.getNextUniqueId(),topic:e,desc:{},sub:{},tags:[],ephemeral:{}}};case"del":return{del:{id:this.getNextUniqueId(),topic:e,what:null,delseq:null,user:null,hard:!1}};case"note":return{note:{topic:e,what:null,seq:void 0}};default:throw new Error(`Unknown packet type requested: ${u}`)}}#T(u,D,e){this._cache[u+":"+D]=e}#S(u,D){return this._cache[u+":"+D]}#L(u,D){delete this._cache[u+":"+D]}#R(u,D,e){const t=u?u+":":void 0;for(let u in this._cache)if((!t||0==u.indexOf(t))&&D.call(e,this._cache[u],u))break}#M(u){u._tinode=this,u._cacheGetUser=u=>{const D=this.#S("user",u);if(D)return{user:u,public:d({},D)}},u._cachePutUser=(u,D)=>{this.#T("user",u,d({},D.public))},u._cacheDelUser=u=>{this.#L("user",u)},u._cachePutSelf=D=>{this.#T("topic",u.name,u)},u._cacheDelSelf=D=>{this.#L("topic",u.name)}}#O(u){return u.params&&u.params.user?(this._myUID=u.params.user,this._authenticated=u&&u.code>=200&&u.code<300,u.params&&u.params.token&&u.params.expires?this._authToken={token:u.params.token,expires:u.params.expires}:this._authToken=null,this.onLogin&&this.onLogin(u.code,u.text),u):u}static credential(u,D,e,t){return"object"==typeof u&&({val:D,params:e,resp:t,meth:u}=u),u&&(D||t)?[{meth:u,val:D,resp:t,params:e}]:null}static topicType(u){return O.topicType(u)}static isMeTopicName(u){return O.isMeTopicName(u)}static isGroupTopicName(u){return O.isGroupTopicName(u)}static isP2PTopicName(u){return O.isP2PTopicName(u)}static isCommTopicName(u){return O.isCommTopicName(u)}static isNewGroupTopicName(u){return O.isNewGroupTopicName(u)}static isChannelTopicName(u){return O.isChannelTopicName(u)}static getVersion(){return D}static setNetworkProviders(u,D){P=u,k=D,b.setNetworkProviders(P,k),N.setNetworkProvider(k)}static setDatabaseProvider(u){R=u,S.setDatabaseProvider(R)}static getLibrary(){return C}static isNullValue(u){return u===s}getNextUniqueId(){return 0!=this._messageId?""+this._messageId++:void 0}connect(u){return this._connection.connect(u)}reconnect(u){this._connection.reconnect(u)}disconnect(){this._connection.disconnect()}clearStorage(){return this._db.isReady()?this._db.deleteDatabase():Promise.resolve()}initStorage(){return this._db.isReady()?Promise.resolve():this._db.initDatabase()}networkProbe(){this._connection.probe()}isConnected(){return this._connection.isConnected()}isAuthenticated(){return this._authenticated}authorizeURL(u){if("string"!=typeof u)return u;if(o(u)){const D="scheme://host/",e=new URL(u,D);this._apiKey&&e.searchParams.append("apikey",this._apiKey),this._authToken&&this._authToken.token&&(e.searchParams.append("auth","token"),e.searchParams.append("secret",this._authToken.token)),u=e.toString().substring(D.length-1)}return u}account(u,D,e,t,C){const F=this.#I("acc");return F.acc.user=u,F.acc.scheme=D,F.acc.secret=e,F.acc.login=t,C&&(F.acc.desc.defacs=C.defacs,F.acc.desc.public=C.public,F.acc.desc.private=C.private,F.acc.desc.trusted=C.trusted,F.acc.tags=C.tags,F.acc.cred=C.cred,F.acc.tmpscheme=C.scheme,F.acc.tmpsecret=C.secret,Array.isArray(C.attachments)&&C.attachments.length>0&&(F.extra={attachments:C.attachments.filter((u=>o(u)))})),this.#k(F,F.acc.id)}createAccount(u,D,e,t){let C=this.account("new",u,D,e,t);return e&&(C=C.then((u=>this.#O(u)))),C}createAccountBasic(u,D,e){return u=u||"",D=D||"",this.createAccount("basic",$(u+":"+D),!0,e)}updateAccountBasic(u,D,e,t){return D=D||"",e=e||"",this.account(u,"basic",$(D+":"+e),!1,t)}hello(){const u=this.#I("hi");return this.#k(u,u.hi.id).then((u=>(this._connection.backoffReset(),u.params&&(this._serverInfo=u.params),this.onConnect&&this.onConnect(),u))).catch((u=>{this._connection.reconnect(!0),this.onDisconnect&&this.onDisconnect(u)}))}setDeviceToken(u){let D=!1;return(u=u||null)!=this._deviceToken&&(this._deviceToken=u,this.isConnected()&&this.isAuthenticated()&&(this.#k({hi:{dev:u||V.DEL_CHAR}}),D=!0)),D}login(u,D,e){const t=this.#I("login");return t.login.scheme=u,t.login.secret=D,t.login.cred=e,this.#k(t,t.login.id).then((u=>this.#O(u)))}loginBasic(u,D,e){return this.login("basic",$(u+":"+D),e).then((D=>(this._login=u,D)))}loginToken(u,D){return this.login("token",u,D)}requestResetAuthSecret(u,D,e){return this.login("reset",$(u+":"+D+":"+e))}getAuthToken(){return this._authToken&&this._authToken.expires.getTime()>Date.now()?this._authToken:(this._authToken=null,null)}setAuthToken(u){this._authToken=u}subscribe(u,D,e){const t=this.#I("sub",u);if(u||(u=F),t.sub.get=D,e){if(e.sub&&(t.sub.set.sub=e.sub),e.desc){const D=e.desc;V.isNewGroupTopicName(u)?t.sub.set.desc=D:V.isP2PTopicName(u)&&D.defacs&&(t.sub.set.desc={defacs:D.defacs})}Array.isArray(e.attachments)&&e.attachments.length>0&&(t.extra={attachments:e.attachments.filter((u=>o(u)))}),e.tags&&(t.sub.set.tags=e.tags)}return this.#k(t,t.sub.id)}leave(u,D){const e=this.#I("leave",u);return e.leave.unsub=D,this.#k(e,e.leave.id)}createMessage(u,D,e){const t=this.#I("pub",u);let C="string"==typeof D?T().parse(D):D;return C&&!T().isPlainText(C)&&(t.pub.head={mime:T().getContentType()},D=C),t.pub.noecho=e,t.pub.content=D,t.pub}publish(u,D,e){return this.publishMessage(this.createMessage(u,D,e))}publishMessage(u,D){(u=Object.assign({},u)).seq=void 0,u.from=void 0,u.ts=void 0;const e={pub:u};return D&&(e.extra={attachments:D.filter((u=>o(u)))}),this.#k(e,u.id)}oobNotification(D){switch(this.logger("oob: "+(this._trimLongStrings?JSON.stringify(D,j):D)),D.what){case"msg":if(!D.seq||D.seq<1||!D.topic)break;if(!this.isConnected())break;const e=this.#S("topic",D.topic);if(!e)break;if(e.isSubscribed())break;e.maxMsgSeq(){this.logger("Failed to get the name of a new sender",u)})),e.subscribe(null).then((u=>e.getMeta(new I(e).withLaterData(24).withLaterDel(24).build()))).then((u=>{e.leaveDelayed(!1,1e3)})).catch((u=>{this.logger("On push data fetch failed",u)})).finally((u=>{this.getMeTopic()._refreshContact("msg",e)})));break;case"read":this.getMeTopic()._routePres({what:"read",seq:D.seq});break;case"sub":if(!this.isMe(D.xfrom))break;const t={given:D.modeGiven,want:D.modeWant},C=new u(t),F=C.mode&&C.mode!=u._NONE?{what:"acs",src:D.topic,dacs:t}:{what:"gone",src:D.topic};this.getMeTopic()._routePres(F);break;default:this.logger("Unknown push type ignored",D.what)}}getMeta(u,D){const e=this.#I("get",u);return e.get=d(e.get,D),this.#k(e,e.get.id)}setMeta(u,D){const e=this.#I("set",u),t=[];return D&&(["desc","sub","tags","cred","ephemeral"].forEach((function(u){D.hasOwnProperty(u)&&(t.push(u),e.set[u]=D[u])})),Array.isArray(D.attachments)&&D.attachments.length>0&&(e.extra={attachments:D.attachments.filter((u=>o(u)))})),0==t.length?Promise.reject(new Error("Invalid {set} parameters")):this.#k(e,e.set.id)}delMessages(u,D,e){const t=this.#I("del",u);return t.del.what="msg",t.del.delseq=D,t.del.hard=e,this.#k(t,t.del.id)}delTopic(u,D){const e=this.#I("del",u);return e.del.what="topic",e.del.hard=D,this.#k(e,e.del.id)}delSubscription(u,D){const e=this.#I("del",u);return e.del.what="sub",e.del.user=D,this.#k(e,e.del.id)}delCredential(u,D){const e=this.#I("del",E);return e.del.what="cred",e.del.cred={meth:u,val:D},this.#k(e,e.del.id)}delCurrentUser(u){const D=this.#I("del",null);return D.del.what="user",D.del.hard=u,this.#k(D,D.del.id).then((u=>{this._myUID=null}))}note(u,D,e){if(e<=0||e>=i)throw new Error(`Invalid message id ${e}`);const t=this.#I("note",u);t.note.what=D,t.note.seq=e,this.#k(t)}noteKeyPress(u,D){const e=this.#I("note",u);e.note.what=D||"kp",this.#k(e)}videoCall(u,D,e,t){const C=this.#I("note",u);C.note.seq=D,C.note.what="call",C.note.event=e,C.note.payload=t,this.#k(C,C.note.id)}getTopic(u){let D=this.#S("topic",u);return!D&&u&&(D=u==E?new U:u==r?new q:new O(u),this.#M(D),D._cachePutSelf()),D}cacheGetTopic(u){return this.#S("topic",u)}cacheRemTopic(u){this.#L("topic",u)}mapTopics(u,D){this.#R("topic",u,D)}isTopicCached(u){return!!this.#S("topic",u)}newGroupTopicName(u){return(u?A:F)+this.getNextUniqueId()}getMeTopic(){return this.getTopic(E)}getFndTopic(){return this.getTopic(r)}getLargeFileHelper(){return new N(this,"0")}getCurrentUserID(){return this._myUID}isMe(u){return this._myUID===u}getCurrentLogin(){return this._login}getServerInfo(){return this._serverInfo}report(u,D){return this.publish("sys",T().attachJSON(null,{action:u,target:D}))}getServerParam(u,D){return this._serverInfo&&this._serverInfo[u]||D}enableLogging(u,D){this._loggingEnabled=u,this._trimLongStrings=u&&D}setHumanLanguage(u){u&&(this._humanLanguage=u)}isTopicOnline(u){const D=this.#S("topic",u);return D&&D.online}getTopicAccessMode(u){const D=this.#S("topic",u);return D?D.acs:null}wantAkn(u){this._messageId=u?Math.floor(16777215*Math.random()+16777215):0}onWebsocketOpen=void 0;onConnect=void 0;onDisconnect=void 0;onLogin=void 0;onCtrlMessage=void 0;onDataMessage=void 0;onPresMessage=void 0;onMessage=void 0;onRawMessage=void 0;onNetworkProbe=void 0;onAutoreconnectIteration=void 0}V.MESSAGE_STATUS_NONE=0,V.MESSAGE_STATUS_QUEUED=10,V.MESSAGE_STATUS_SENDING=20,V.MESSAGE_STATUS_FAILED=30,V.MESSAGE_STATUS_FATAL=40,V.MESSAGE_STATUS_SENT=50,V.MESSAGE_STATUS_RECEIVED=60,V.MESSAGE_STATUS_READ=70,V.MESSAGE_STATUS_TO_ME=80,V.DEL_CHAR=s,V.MAX_MESSAGE_SIZE="maxMessageSize",V.MAX_SUBSCRIBER_COUNT="maxSubscriberCount",V.MAX_TAG_COUNT="maxTagCount",V.MAX_FILE_UPLOAD_SIZE="maxFileUploadSize",V.REQ_CRED_VALIDATORS="reqCred",V.URI_TOPIC_ID_PREFIX="tinode:topic/"})(),t})())); //# sourceMappingURL=tinode.prod.js.map \ No newline at end of file diff --git a/umd/tinode.prod.js.map b/umd/tinode.prod.js.map index 01774eb..ad3c2ea 100644 --- a/umd/tinode.prod.js.map +++ b/umd/tinode.prod.js.map @@ -1 +1 @@ -{"version":3,"file":"tinode.prod.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/drafty.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/access-mode.js","webpack://tinode/./version.js","webpack://tinode/./src/config.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/utils.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/tinode.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/topic.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, () => {\nreturn ","/**\n * @copyright 2015-2022 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n *

Supports conversion of user keyboard input to formatted text:

\n *
    \n *
  • *abc* → abc
  • \n *
  • _abc_ → abc
  • \n *
  • ~abc~ → abc
  • \n *
  • `abc` → abc
  • \n *
\n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n *
\n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * 
\n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst JSON_MIME_TYPE = 'application/json';\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
',\n close: _ => '
'\n },\n // Row: logic grouping of elements\n RW: {\n open: _ => '
',\n close: _ => '
'\n },\n // Quoted block.\n QQ: {\n open: _ => '
',\n close: _ => '
',\n props: (data) => {\n return data ? {} : null;\n },\n },\n // Video call\n VC: {\n open: _ => '
',\n close: _ => '
',\n props: data => {\n if (!data) return {};\n return {\n 'data-duration': data.duration,\n 'data-state': data.state,\n };\n }\n },\n // Video.\n VD: {\n open: data => {\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return '';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = result.txt.length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n result.fmt = result.fmt.concat(block.fmt.map((s) => {\n s.at += offset;\n return s;\n }));\n }\n if (block.ent) {\n result.fmt = result.fmt.concat(block.ent.map((s) => {\n s.at += offset;\n return s;\n }));\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = first.txt.length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: quote.txt.length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: (name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: JSON_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: content.txt.length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup.\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (entData.mime != JSON_MIME_TYPE && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > txt.length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n let tree = spansToTree({}, txt, 0, txt.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, text, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: text.substring(start, end)\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: text.substring(start, span.start)\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, text, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: text.substring(start, end)\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = doc.txt.length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = doc.txt.length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const len = node.text.length;\n if (len > limit) {\n node.text = node.text.substring(0, limit) + tail;\n limit = -1;\n } else {\n limit -= len;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (c.data['mime'] == JSON_MIME_TYPE) {\n // JSON attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","export const PACKAGE_VERSION = \"0.22.12\";\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2023 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.21';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Ignore properties where ignore[property] is true.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src, ignore) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return src;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (!ignore || !ignore[prop]) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n // FIXME: probably need to log something here.\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval, ignore) {\n cache[key] = mergeObj(cache[key], newval, ignore);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, strip empty and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out.sort().filter(function(item, pos, ary) {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Settings for exponential backoff\nconst _BOFF_BASE = 2000; // 2000 milliseconds, minimum delay between reconnects\nconst _BOFF_MAX_ITER = 10; // Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes\nconst _BOFF_JITTER = 0.3; // Add random delay\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = _BOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _BOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= _BOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) { // 1 == OPENED\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 1;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n // Object store (table) for topics. The primary key is topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n };\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = (event) => {\n resolve(event.target.result);\n };\n trx.onerror = (event) => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {Object} query - parameters of the message range to retrieve.\n * @param {number=} query.since - the least message ID to retrieve (inclusive).\n * @param {number=} query.before - the greatest message ID to retrieve (exclusive).\n * @param {number=} query.limit - the maximum number of messages to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n query = query || {};\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n const result = [];\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n const trx = this.db.transaction(['message']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev').onsuccess = (event) => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'read', 'recv', 'seq', 'clear', 'defacs',\n 'creds', 'public', 'trusted', 'private', 'touched', '_deleted'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2022 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.20\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n Topic,\n TopicMe,\n TopicFnd\n} from './topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format /\n this._appName = config.appName || \"Undefined\";\n\n // API Key.\n this._apiKey = config.apiKey;\n\n // Name and version of the browser.\n this._platform = config.platform || 'web';\n // Underlying OS.\n if (typeof navigator != 'undefined') {\n this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n this._hwos = navigator.platform;\n // This is the default language. It could be changed by client.\n this._humanLanguage = navigator.language || 'en-US';\n }\n\n Connection.logger = this.logger;\n Drafty.logger = this.logger;\n\n // WebSocket or long polling network connection.\n if (config.transport != 'lp' && config.transport != 'ws') {\n config.transport = detectTransport();\n }\n this._connection = new Connection(config, Const.PROTOCOL_VERSION, /* autoreconnect */ true);\n this._connection.onMessage = (data) => {\n // Call the main message dispatcher.\n this.#dispatchMessage(data);\n }\n\n // Ready to start sending.\n this._connection.onOpen = _ => this.#connectionOpen();\n this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n\n // Wrapper for the reconnect iterator callback.\n this._connection.onAutoreconnectIteration = (timeout, promise) => {\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout, promise);\n }\n }\n\n this._persist = config.persist;\n // Initialize object regardless. It simplifies the code.\n this._db = new DBCache(err => {\n this.logger('DB', err);\n }, this.logger);\n\n if (this._persist) {\n // Create the persistent cache.\n // Store promises to be resolved when messages load into memory.\n const prom = [];\n this._db.initDatabase().then(_ => {\n // First load topics into memory.\n return this._db.mapTopics((data) => {\n let topic = this.#cacheGet('topic', data.name);\n if (topic) {\n return;\n }\n if (data.name == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (data.name == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(data.name);\n }\n this._db.deserializeTopic(topic, data);\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Topic loaded from DB is not new.\n delete topic._new;\n // Request to load messages and save the promise.\n prom.push(topic._loadMessages(this._db));\n });\n }).then(_ => {\n // Then load users.\n return this._db.mapUsers((data) => {\n this.#cachePut('user', data.uid, mergeObj({}, data.public));\n });\n }).then(_ => {\n // Now wait for all messages to finish loading.\n return Promise.all(prom);\n }).then(_ => {\n if (onComplete) {\n onComplete();\n }\n this.logger(\"Persistent cache initialized.\");\n }).catch(err => {\n if (onComplete) {\n onComplete(err);\n }\n this.logger(\"Failed to initialize persistent cache:\", err);\n });\n } else {\n this._db.deleteDatabase().then(_ => {\n if (onComplete) {\n onComplete();\n }\n });\n }\n }\n\n // Private methods.\n\n // Console logger. Babel somehow fails to parse '...rest' parameter.\n logger(str, ...args) {\n if (this._loggingEnabled) {\n const d = new Date();\n const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' +\n ('0' + d.getUTCMinutes()).slice(-2) + ':' +\n ('0' + d.getUTCSeconds()).slice(-2) + '.' +\n ('00' + d.getUTCMilliseconds()).slice(-3);\n\n console.log('[' + dateString + ']', str, args.join(' '));\n }\n }\n\n // Generator of default promises for sent packets.\n #makePromise(id) {\n let promise = null;\n if (id) {\n promise = new Promise((resolve, reject) => {\n // Stored callbacks will be called when the response packet with this Id arrives\n this._pendingPromises[id] = {\n 'resolve': resolve,\n 'reject': reject,\n 'ts': new Date()\n };\n });\n }\n return promise;\n };\n\n // Resolve or reject a pending promise.\n // Unresolved promises are stored in _pendingPromises.\n #execPromise(id, code, onOK, errorText) {\n const callbacks = this._pendingPromises[id];\n if (callbacks) {\n delete this._pendingPromises[id];\n if (code >= 200 && code < 400) {\n if (callbacks.resolve) {\n callbacks.resolve(onOK);\n }\n } else if (callbacks.reject) {\n callbacks.reject(new CommError(errorText, code));\n }\n }\n }\n\n // Send a packet. If packet id is provided return a promise.\n #send(pkt, id) {\n let promise;\n if (id) {\n promise = this.#makePromise(id);\n }\n pkt = simplify(pkt);\n let msg = JSON.stringify(pkt);\n this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n try {\n this._connection.sendText(msg);\n } catch (err) {\n // If sendText throws, wrap the error in a promise or rethrow.\n if (id) {\n this.#execPromise(id, Connection.NETWORK_ERROR, null, err.message);\n } else {\n throw err;\n }\n }\n return promise;\n }\n\n // The main message dispatcher.\n #dispatchMessage(data) {\n // Skip empty response. This happens when LP times out.\n if (!data)\n return;\n\n this._inPacketCount++;\n\n // Send raw message to listener\n if (this.onRawMessage) {\n this.onRawMessage(data);\n }\n\n if (data === '0') {\n // Server response to a network probe.\n if (this.onNetworkProbe) {\n this.onNetworkProbe();\n }\n // No processing is necessary.\n return;\n }\n\n let pkt = JSON.parse(data, jsonParseHelper);\n if (!pkt) {\n this.logger(\"in: \" + data);\n this.logger(\"ERROR: failed to parse data\");\n } else {\n this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n\n // Send complete packet to listener\n if (this.onMessage) {\n this.onMessage(pkt);\n }\n\n if (pkt.ctrl) {\n // Handling {ctrl} message\n if (this.onCtrlMessage) {\n this.onCtrlMessage(pkt.ctrl);\n }\n\n // Resolve or reject a pending promise, if any\n if (pkt.ctrl.id) {\n this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n }\n setTimeout(_ => {\n if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n // User evicted from topic.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._resetSub();\n if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n topic._gone();\n }\n }\n } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n if (pkt.ctrl.params.what == 'data') {\n // code=208, all messages received: \"params\":{\"count\":11,\"what\":\"data\"},\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._allMessagesReceived(pkt.ctrl.params.count);\n }\n } else if (pkt.ctrl.params.what == 'sub') {\n // code=204, the topic has no (refreshed) subscriptions.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n // Trigger topic.onSubsUpdated.\n topic._processMetaSubs([]);\n }\n }\n }\n }, 0);\n } else {\n setTimeout(_ => {\n if (pkt.meta) {\n // Handling a {meta} message.\n // Preferred API: Route meta to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.meta.topic);\n if (topic) {\n topic._routeMeta(pkt.meta);\n }\n\n if (pkt.meta.id) {\n this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n }\n\n // Secondary API: callback\n if (this.onMetaMessage) {\n this.onMetaMessage(pkt.meta);\n }\n } else if (pkt.data) {\n // Handling {data} message\n // Preferred API: Route data to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.data.topic);\n if (topic) {\n topic._routeData(pkt.data);\n }\n\n // Secondary API: Call callback\n if (this.onDataMessage) {\n this.onDataMessage(pkt.data);\n }\n } else if (pkt.pres) {\n // Handling {pres} message\n // Preferred API: Route presence to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.pres.topic);\n if (topic) {\n topic._routePres(pkt.pres);\n }\n\n // Secondary API - callback\n if (this.onPresMessage) {\n this.onPresMessage(pkt.pres);\n }\n } else if (pkt.info) {\n // {info} message - read/received notifications and key presses\n // Preferred API: Route {info}} to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.info.topic);\n if (topic) {\n topic._routeInfo(pkt.info);\n }\n\n // Secondary API - callback\n if (this.onInfoMessage) {\n this.onInfoMessage(pkt.info);\n }\n } else {\n this.logger(\"ERROR: Unknown packet received.\");\n }\n }, 0);\n }\n }\n }\n\n // Connection open, ready to start sending.\n #connectionOpen() {\n if (!this._expirePromises) {\n // Reject promises which have not been resolved for too long.\n this._expirePromises = setInterval(_ => {\n const err = new CommError(\"timeout\", 504);\n const expires = new Date(new Date().getTime() - Const.EXPIRE_PROMISES_TIMEOUT);\n for (let id in this._pendingPromises) {\n let callbacks = this._pendingPromises[id];\n if (callbacks && callbacks.ts < expires) {\n this.logger(\"Promise expired\", id);\n delete this._pendingPromises[id];\n if (callbacks.reject) {\n callbacks.reject(err);\n }\n }\n }\n }, Const.EXPIRE_PROMISES_PERIOD);\n }\n this.hello();\n }\n\n #disconnected(err, code) {\n this._inPacketCount = 0;\n this._serverInfo = null;\n this._authenticated = false;\n\n if (this._expirePromises) {\n clearInterval(this._expirePromises);\n this._expirePromises = null;\n }\n\n // Mark all topics as unsubscribed\n this.#cacheMap('topic', (topic, key) => {\n topic._resetSub();\n });\n\n // Reject all pending promises\n for (let key in this._pendingPromises) {\n const callbacks = this._pendingPromises[key];\n if (callbacks && callbacks.reject) {\n callbacks.reject(err);\n }\n }\n this._pendingPromises = {};\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n }\n\n // Get User Agent string\n #getUserAgent() {\n return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + Const.LIBRARY;\n }\n\n // Generator of packets stubs\n #initPacket(type, topic) {\n switch (type) {\n case 'hi':\n return {\n 'hi': {\n 'id': this.getNextUniqueId(),\n 'ver': Const.VERSION,\n 'ua': this.#getUserAgent(),\n 'dev': this._deviceToken,\n 'lang': this._humanLanguage,\n 'platf': this._platform\n }\n };\n\n case 'acc':\n return {\n 'acc': {\n 'id': this.getNextUniqueId(),\n 'user': null,\n 'scheme': null,\n 'secret': null,\n 'tmpscheme': null,\n 'tmpsecret': null,\n 'login': false,\n 'tags': null,\n 'desc': {},\n 'cred': {}\n }\n };\n\n case 'login':\n return {\n 'login': {\n 'id': this.getNextUniqueId(),\n 'scheme': null,\n 'secret': null\n }\n };\n\n case 'sub':\n return {\n 'sub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'set': {},\n 'get': {}\n }\n };\n\n case 'leave':\n return {\n 'leave': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'unsub': false\n }\n };\n\n case 'pub':\n return {\n 'pub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'noecho': false,\n 'head': null,\n 'content': {}\n }\n };\n\n case 'get':\n return {\n 'get': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'desc': {},\n 'sub': {},\n 'data': {}\n }\n };\n\n case 'set':\n return {\n 'set': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'desc': {},\n 'sub': {},\n 'tags': [],\n 'ephemeral': {}\n }\n };\n\n case 'del':\n return {\n 'del': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'delseq': null,\n 'user': null,\n 'hard': false\n }\n };\n\n case 'note':\n return {\n 'note': {\n // no id by design (except calls).\n 'topic': topic,\n 'what': null, // one of \"recv\", \"read\", \"kp\", \"call\"\n 'seq': undefined // the server-side message id acknowledged as received or read.\n }\n };\n\n default:\n throw new Error(`Unknown packet type requested: ${type}`);\n }\n }\n\n // Cache management\n #cachePut(type, name, obj) {\n this._cache[type + ':' + name] = obj;\n }\n #cacheGet(type, name) {\n return this._cache[type + ':' + name];\n }\n #cacheDel(type, name) {\n delete this._cache[type + ':' + name];\n }\n\n // Enumerate all items in cache, call func for each item.\n // Enumeration stops if func returns true.\n #cacheMap(type, func, context) {\n const key = type ? type + ':' : undefined;\n for (let idx in this._cache) {\n if (!key || idx.indexOf(key) == 0) {\n if (func.call(context, this._cache[idx], idx)) {\n break;\n }\n }\n }\n }\n\n // Make limited cache management available to topic.\n // Caching user.public only. Everything else is per-topic.\n #attachCacheToTopic(topic) {\n topic._tinode = this;\n\n topic._cacheGetUser = (uid) => {\n const pub = this.#cacheGet('user', uid);\n if (pub) {\n return {\n user: uid,\n public: mergeObj({}, pub)\n };\n }\n return undefined;\n };\n topic._cachePutUser = (uid, user) => {\n this.#cachePut('user', uid, mergeObj({}, user.public));\n };\n topic._cacheDelUser = (uid) => {\n this.#cacheDel('user', uid);\n };\n topic._cachePutSelf = _ => {\n this.#cachePut('topic', topic.name, topic);\n };\n topic._cacheDelSelf = _ => {\n this.#cacheDel('topic', topic.name);\n };\n }\n\n // On successful login save server-provided data.\n #loginSuccessful(ctrl) {\n if (!ctrl.params || !ctrl.params.user) {\n return ctrl;\n }\n // This is a response to a successful login,\n // extract UID and security token, save it in Tinode module\n this._myUID = ctrl.params.user;\n this._authenticated = (ctrl && ctrl.code >= 200 && ctrl.code < 300);\n if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n this._authToken = {\n token: ctrl.params.token,\n expires: ctrl.params.expires\n };\n } else {\n this._authToken = null;\n }\n\n if (this.onLogin) {\n this.onLogin(ctrl.code, ctrl.text);\n }\n\n return ctrl;\n }\n\n // Static methods.\n /**\n * Helper method to package account credential.\n *\n * @param {string | Credential} meth - validation method or object with validation data.\n * @param {string=} val - validation value (e.g. email or phone number).\n * @param {Object=} params - validation parameters.\n * @param {string=} resp - validation response.\n *\n * @returns {Array.} array with a single credential or null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.} tags - array of string tags for user discovery.\n * @property {string} scheme - Temporary authentication scheme for password reset.\n * @property {string} secret - Temporary authentication secret for password reset.\n * @property {Array.=} attachments - Array of references to out of band attachments used in account description.\n */\n /**\n * @typedef DefAcs\n * @type {Object}\n * @property {string=} auth - Access mode for me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.=} attachments - URLs of out of band attachments used in parameters.\n */\n /**\n * @typedef SetDesc\n * @type {Object}\n * @property {DefAcs=} defacs - Default access mode.\n * @property {Object=} public - Free-form topic description, publically accessible.\n * @property {Object=} private - Free-form topic description accessible only to the owner.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n */\n /**\n * @typedef SetSub\n * @type {Object}\n * @property {string=} user - UID of the user affected by the request. Default (empty) - current user.\n * @property {string=} mode - User access mode, either requested or assigned dependent on context.\n */\n /**\n * Send a topic subscription request.\n *\n * @param {string} topic - Name of the topic to subscribe to.\n * @param {GetQuery=} getParams - Optional subscription metadata query\n * @param {SetParams=} setParams - Optional initialization parameters\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n subscribe(topicName, getParams, setParams) {\n const pkt = this.#initPacket('sub', topicName)\n if (!topicName) {\n topicName = Const.TOPIC_NEW;\n }\n\n pkt.sub.get = getParams;\n\n if (setParams) {\n if (setParams.sub) {\n pkt.sub.set.sub = setParams.sub;\n }\n\n if (setParams.desc) {\n const desc = setParams.desc;\n if (Tinode.isNewGroupTopicName(topicName)) {\n // Full set.desc params are used for new topics only\n pkt.sub.set.desc = desc;\n } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n // Use optional default permissions only.\n pkt.sub.set.desc = {\n defacs: desc.defacs\n };\n }\n }\n\n // See if external objects were used in topic description.\n if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n pkt.extra = {\n attachments: setParams.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n\n if (setParams.tags) {\n pkt.sub.set.tags = setParams.tags;\n }\n }\n return this.#send(pkt, pkt.sub.id);\n }\n\n /**\n * Detach and optionally unsubscribe from the topic\n *\n * @param {string} topic - Topic to detach from.\n * @param {boolean} unsub - If true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.=} attachments - array of URLs with attachments.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publishMessage(pub, attachments) {\n // Make a shallow copy. Needed in order to clear locally-assigned temp values;\n pub = Object.assign({}, pub);\n pub.seq = undefined;\n pub.from = undefined;\n pub.ts = undefined;\n const msg = {\n pub: pub,\n };\n if (attachments) {\n msg.extra = {\n attachments: attachments.filter(ref => isUrlRelative(ref))\n };\n }\n return this.#send(msg, pub.id);\n }\n\n /**\n * Out of band notification: notify topic that an external (push) notification was recived by the client.\n *\n * @param {object} data - notification payload.\n * @param {string} data.what - notification type, 'msg', 'read', 'sub'.\n * @param {string} data.topic - name of the updated topic.\n * @param {number=} data.seq - seq ID of the affected message.\n * @param {string=} data.xfrom - UID of the sender.\n * @param {object=} data.given - new subscription 'given', e.g. 'ASWP...'.\n * @param {object=} data.want - new subscription 'want', e.g. 'RWJ...'.\n */\n oobNotification(data) {\n this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n\n switch (data.what) {\n case 'msg':\n if (!data.seq || data.seq < 1 || !data.topic) {\n // Server sent invalid data.\n break;\n }\n\n if (!this.isConnected()) {\n // Let's ignore the message if there is no connection: no connection means there are no open\n // tabs with Tinode.\n break;\n }\n\n const topic = this.#cacheGet('topic', data.topic);\n if (!topic) {\n // TODO: check if there is a case when a message can arrive from an unknown topic.\n break;\n }\n\n if (topic.isSubscribed()) {\n // No need to fetch: topic is already subscribed and got data through normal channel.\n break;\n }\n\n if (topic.maxMsgSeq() < data.seq) {\n if (topic.isChannelType()) {\n topic._updateReceived(data.seq, 'fake-uid');\n }\n\n // New message.\n if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n // Message from unknown sender, fetch description from the server.\n // Sending asynchronously without a subscription.\n this.getMeta(data.xfrom, new MetaGetBuilder().withDesc().build()).catch(err => {\n this.logger(\"Failed to get the name of a new sender\", err);\n });\n }\n\n topic.subscribe(null).then(_ => {\n return topic.getMeta(new MetaGetBuilder(topic).withLaterData(24).withLaterDel(24).build());\n }).then(_ => {\n // Allow data fetch to complete and get processed successfully.\n topic.leaveDelayed(false, 1000);\n }).catch(err => {\n this.logger(\"On push data fetch failed\", err);\n }).finally(_ => {\n this.getMeTopic()._refreshContact('msg', topic);\n });\n }\n break;\n\n case 'read':\n this.getMeTopic()._routePres({\n what: 'read',\n seq: data.seq\n });\n break;\n\n case 'sub':\n if (!this.isMe(data.xfrom)) {\n // TODO: handle updates from other users.\n break;\n }\n\n const mode = {\n given: data.modeGiven,\n want: data.modeWant\n };\n const acs = new AccessMode(mode);\n const pres = (!acs.mode || acs.mode == AccessMode._NONE) ?\n // Subscription deleted.\n {\n what: 'gone',\n src: data.topic\n } :\n // New subscription or subscription updated.\n {\n what: 'acs',\n src: data.topic,\n dacs: mode\n };\n this.getMeTopic()._routePres(pres);\n break;\n\n default:\n this.logger(\"Unknown push type ignored\", data.what);\n }\n }\n\n /**\n * @typedef GetQuery\n * @type {Object}\n * @property {GetOptsType=} desc - If provided (even if empty), fetch topic description.\n * @property {GetOptsType=} sub - If provided (even if empty), fetch topic subscriptions.\n * @property {GetDataType=} data - If provided (even if empty), get messages.\n */\n\n /**\n * @typedef GetOptsType\n * @type {Object}\n * @property {Date=} ims - \"If modified since\", fetch data only it was was modified since stated date.\n * @property {number=} limit - Maximum number of results to return. Ignored when querying topic description.\n */\n\n /**\n * @typedef GetDataType\n * @type {Object}\n * @property {number=} since - Load messages with seq id equal or greater than this value.\n * @property {number=} before - Load messages with seq id lower than this number.\n * @property {number=} limit - Maximum number of results to return.\n */\n\n /**\n * Request topic metadata\n *\n * @param {string} topic - Name of the topic to query.\n * @param {GetQuery} params - Parameters of the query. Use {@link Tinode.MetaGetBuilder} to generate.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n getMeta(topic, params) {\n const pkt = this.#initPacket('get', topic);\n\n pkt.get = mergeObj(pkt.get, params);\n\n return this.#send(pkt, pkt.get.id);\n }\n\n /**\n * Update topic's metadata: description, subscribtions.\n *\n * @param {string} topic - Topic to update.\n * @param {SetParams} params - topic metadata to update.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n setMeta(topic, params) {\n const pkt = this.#initPacket('set', topic);\n const what = [];\n\n if (params) {\n ['desc', 'sub', 'tags', 'cred', 'ephemeral'].forEach(function(key) {\n if (params.hasOwnProperty(key)) {\n what.push(key);\n pkt.set[key] = params[key];\n }\n });\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n if (what.length == 0) {\n return Promise.reject(new Error(\"Invalid {set} parameters\"));\n }\n\n return this.#send(pkt, pkt.set.id);\n }\n\n /**\n * Range of message IDs to delete.\n *\n * @typedef DelRange\n * @type {Object}\n * @property {number} low - low end of the range, inclusive (closed).\n * @property {number=} hi - high end of the range, exclusive (open).\n */\n /**\n * Delete some or all messages in a topic.\n *\n * @param {string} topic - Topic name to delete messages from.\n * @param {DelRange[]} list - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delMessages(topic, ranges, hard) {\n const pkt = this.#initPacket('del', topic);\n\n pkt.del.what = 'msg';\n pkt.del.delseq = ranges;\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete the topic alltogether. Requires Owner permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delTopic(topicName, hard) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'topic';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete subscription. Requires Share permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delSubscription(topicName, user) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'sub';\n pkt.del.user = user;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete credential. Always sent on 'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the element from the end of the buffer.\n * @memberof Tinode.CBuffer#\n * @param {number} at - position to fetch from, counting from the end;\n * undefined or null mean \"last\".\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(at) {\n at |= 0;\n return this.buffer.length > at ? this.buffer[this.buffer.length - 1 - at] : undefined;\n }\n\n /**\n * Add new element(s) to the buffer. Variadic: takes one or more arguments. If an array is passed as a single\n * argument, its elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive).\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive).\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = startIdx | 0;\n beforeIdx = beforeIdx || this.buffer.length;\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n mergeObj,\n mergeToCache,\n normalizeArray\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacls.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {boolean} forward if true, request newer messages.\n */\n getMessagesPage(limit, forward) {\n let query = forward ?\n this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then((count) => {\n if (count == limit) {\n // Got enough messages from local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = forward ? this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n let promise = this.getMeta(query.build());\n if (!forward) {\n promise = promise.then(ctrl => {\n if (ctrl && ctrl.params && !ctrl.params.count) {\n this._noEarlierMsgs = true;\n }\n });\n }\n return promise;\n });\n }\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subsriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Delete messages. Hard-deleting messages requires Owner permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.DelRange[]} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n // Sort ranges in accending order by low, the descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return true;\n }\n if (r1.low == r2.low) {\n return !r2.hi || (r1.hi >= r2.hi);\n }\n return false;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n let tosend = ranges.reduce((out, r) => {\n if (r.low < Const.LOCAL_SEQID) {\n if (!r.hi || r.hi < Const.LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: this._maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = ctrl.params.del;\n }\n\n ranges.forEach((r) => {\n if (r.hi) {\n this.flushMessageRange(r.low, r.hi);\n } else {\n this.flushMessage(r.low);\n }\n });\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} list - list of seq IDs to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesList(list, hardDel) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n let ranges = list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n // Send {del} message, return promise\n return this.delMessages(ranges, hardDel);\n }\n\n /**\n * Delete original message and edited variants. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delMessagesEdits(seq, hardDel) {\n const list = [seq];\n this.messageVersions(seq, msg => list.push(msg.seq));\n // Send {del} message, return promise\n return this.delMessagesList(list, hardDel);\n }\n\n /**\n * Delete topic. Requires Owner permission. Wrapper for {@link Tinode#delTopic}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hard - had-delete topic.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delTopic(hard) {\n if (this._deleted) {\n // The topic is already deleted at the server, just remove from DB.\n this._gone();\n return Promise.resolve(null);\n }\n\n return this._tinode.delTopic(this.name, hard).then(ctrl => {\n this._deleted = true;\n this._resetSub();\n this._gone();\n return ctrl;\n });\n }\n /**\n * Delete subscription. Requires Share permission. Wrapper for {@link Tinode#delSubscription}.\n * @memberof Tinode.Topic#\n *\n * @param {string} user - ID of the user to remove subscription for.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delSubscription(user) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delSubscription(this.name, user).then(ctrl => {\n // Remove the object from the subscription cache;\n delete this._users[user];\n // Notify listeners\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n return ctrl;\n });\n }\n /**\n * Send a read/recv notification.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what notification to send: recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.} a copy of tags\n */\n tags() {\n // Return a copy.\n return this._tags.slice(0);\n }\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (this._isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by seq.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent message from cache. This method counts all messages, including deleted ranges.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast();\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} newer - if true, check for newer messages only.\n */\n msgHasMoreMessages(newer) {\n return newer ? this.seq > this._maxSeq :\n // _minSeq could be more than 1, but earlier messages could have been deleted.\n (this._minSeq > 1 && !this._noEarlierMsgs);\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n _isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!this._isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n data.content = Drafty.updateVideoCall(data.content, {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n });\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived or in response to received\n // {ctrl} after setMeta-sub.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags.length == 1 && tags[0] == Const.DEL_CHAR) {\n tags = [];\n }\n this._tags = tags;\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n const topic = this;\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(function(range) {\n if (!range.hi) {\n count++;\n topic.flushMessage(range.low);\n } else {\n for (let i = range.low; i < range.hi; i++) {\n count++;\n topic.flushMessage(i);\n }\n }\n });\n }\n\n if (count > 0) {\n // this._updateDeletedRanges();\n\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, params) {\n const {\n since,\n before,\n limit\n } = params || {};\n return db.readMessages(this.name, {\n since: since,\n before: before,\n limit: limit || Const.DEFAULT_MESSAGES_PAGE\n })\n .then(msgs => {\n msgs.forEach((data) => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n return msgs.length;\n });\n }\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n}\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n"],"names":["root","factory","exports","module","define","amd","this","MAX_PREVIEW_DATA_SIZE","JSON_MIME_TYPE","ALLOWED_ENT_FIELDS","INLINE_STYLES","name","start","end","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","val","test","url","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","undefined","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","logger","bin","atob","length","buf","ArrayBuffer","arr","Uint8Array","i","charCodeAt","URL","createObjectURL","Blob","type","err","message","base64toDataUrl","DECORATORS","open","_","close","data","props","href","target","id","act","ref","mime","Drafty","src","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","chunkify","line","spans","chunks","span","at","push","chunk","tp","chld","children","toSpanTree","tree","last","draftyToTree","doc","Array","isArray","text","len","key","attachments","forEach","includes","sort","a","b","diff","indexOf","spansToTree","treeTopDown","node","child","parent","addNode","n","substring","att","subspans","inner","tag","treeToDrafty","keymap","c","Object","keys","newKey","transformer","context","dst","call","treeBottomUp","formatter","index","stack","values","pop","shortenTree","limit","tail","lightEntity","allow","copyEntData","lTrim","trimStart","shift","attachmentsToEnd","concat","draftify","startAt","plain","ranges","drafty","light","entries","dc","init","plainText","parse","content","lines","split","entityMap","entityIndex","blx","entities","block","original","re_start","re_end","result","exec","start_offset","lastIndexOf","end_offset","spannify","match","extracted","entity","offset","unique","idx","filter","el","extractEntities","map","s","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","params","assign","quote","header","uid","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","appendButton","attachJSON","UNSAFE_toHTML","join","format","shorten","forwardedContent","replyContent","startsWith","forwarding","toPlainText","isPlainText","toMarkdown","def","isValid","txt_type","hasAttachments","callback","count","hasEntities","styles","sanitizeEntities","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","d","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","value","AccessMode","constructor","acs","given","decode","want","mode","side","flag","Error","str","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_GRP","LOCAL_SEQID","DEL_CHAR","CommError","code","super","jsonParseHelper","date","Date","isNaN","isUrlRelative","isValidDate","getTime","mergeObj","ignore","mergeToCache","cache","newval","simplify","getOwnPropertyNames","WebSocketProvider","XHRProvider","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","makeBaseUrl","host","protocol","version","apiKey","Connection","static","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","setNetworkProviders","wsProvider","xhrProvider","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","clearTimeout","timeout","Math","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","_lpURL","_poller","_sender","lp_poller","url_","resolve","poller","promiseCompleted","onreadystatechange","evt","readyState","status","pkt","JSON","responseText","ctrl","sid","send","onOpen","onMessage","onDisconnect","abort","sender","lp_sender","OPEN","conn","onerror","onopen","onclose","onmessage","NETWORK_ERROR","DB_NAME","IDBProvider","DB","db","disabled","onError","source","trx","transaction","event","error","objectStore","getAll","onsuccess","topic","initDatabase","req","onupgradeneeded","createObjectStore","keyPath","deleteDatabase","onblocked","isReady","updTopic","oncomplete","put","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","updUser","pub","arguments","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","mapSubscriptions","addMessage","add","updMessageStatus","seq","_status","remMessages","from","to","range","readMessages","query","since","before","openCursor","cursor","continue","f","tags","_tags","setAccessMode","read","unread","max","getAccessMode","setDatabaseProvider","idbProvider","IndexedDBProvider","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","relUrl","location","origin","searchParams","addURLParam","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","MetaGetBuilder","what","updated","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withEarlierData","_minSeq","withDesc","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withOneSub","withLaterOneSub","withLaterSub","withTags","withCred","withDel","withLaterDel","_maxDel","extract","build","CBuffer","buffer","compare_","unique_","elem","exact","pivot","found","splice","getAt","getLast","insert","delAt","delRange","reset","startIdx","beforeIdx","find","nearest","isEmpty","Topic","callbacks","created","touched","private","trusted","_users","_queuedSeqId","Const","_noEarlierMsgs","_recvNotificationTimer","_credentials","_messageVersions","_messages","_attached","_new","_delayedLeaveTimer","onData","onMeta","onPres","onInfo","onMetaDesc","onMetaSub","onSubsUpdated","onTagsUpdated","onCredsUpdated","onDeleteTopic","onAllMessagesReceived","topicType","isMeTopicName","isGroupTopicName","isP2PTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","isSubscribed","subscribe","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","desc","_noForwarding","_processMetaDesc","createMessage","noEcho","publish","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_db","_cancelled","_fatal","leave","unsub","_resetSub","_gone","leaveDelayed","delay","getMeta","getMessagesPage","forward","startMetaQuery","_loadMessages","promise","setMeta","out","t","trim","toLowerCase","item","pos","ary","normalizeArray","_processMetaSubs","_processMetaTags","cred","_processMetaCreds","subscriber","am","invite","archive","arch","delMessages","hard","r1","r2","low","hi","tosend","reduce","del","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","list","prev","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","_refreshContact","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","recv","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","cb","origSeq","versions","messages","sinceId","beforeId","msgs","unused1","unused2","_isReplacementMsg","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","msgHasMoreMessages","newer","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isArchived","isMeType","isChannelType","isGroupType","isCommType","isMe","head","replace","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","_routeInfo","_routeMeta","meta","_processDelMessages","clear","delseq","_routePres","pres","online","isTopicCached","dacs","info","subs","_updateCachedUser","creds","_allMessagesReceived","cached","_cachePutUser","_updateReceived","TopicMe","onContactUpdate","turnOff","_myUID","cont","seen","when","updateCount","cacheRemTopic","getTopic","cr","findIndex","meth","done","resp","cacheGetTopic","tgt","ua","dummy","delCredential","method","contacts","getContact","getCredentials","TopicFnd","_contacts","indexBy","getPrototypeOf","b64EncodeUnicode","btoa","encodeURIComponent","p1","String","fromCharCode","jsonBuildHelper","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","rfc3339DateString","jsonLoggerHelper","WebSocket","XMLHttpRequest","indexedDB","chars","global","output","charCode","bc","bs","DBCache","initForNonBrowserApp","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","getBrowserInfo","userAgent","language","detectTransport","persist","all","dateString","_len","args","_key","console","log","onOK","errorText","stringify","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","setInterval","expires","hello","clearInterval","func","_cacheDelUser","onLogin","credential","getVersion","getLibrary","isNullValue","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","URI_TOPIC_ID_PREFIX"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"tinode.prod.js","mappings":"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KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,SAAY,CACR,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,QAAW,CACP,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,SAAY,CACR,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,SAAY,CACR,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,QAAW,CACP,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,SAAY,CACR,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,SAAY,CACR,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,SAAY,CACR,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,SAAY,CACR,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,SAAY,CACR,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,QAAW,CACP,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,QAAW,CACP,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,KAAQ,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,OC1wBGC,GAAkB,u8ECKzBC,GAAwB,IAAIC,OAAO,IAAIpK,OAAOkK,GAAgBG,SAE9DC,GAAyB,IAAIF,OAAO,GAAGpK,OAAOkK,GAAgBG,OAAQ,MACtEE,GAAsB,uBACX,SAASC,GAAcC,EAAcC,EAAMxG,EAAI1E,GAC1D,IAUImL,EAqBAC,EA/BAC,EAAOJ,EAAaI,KAAMlC,EAAW8B,EAAa9B,SAA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UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW,GAAI,CACAlB,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIW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,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI6B,GAAI,CACApC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI8B,GAAI,CACArC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI+B,GAAI,CACAtC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI+B,GAAI,CACAtC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACI+B,GAAI,CACAtC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIgC,GAAI,CACAvC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIiC,GAAI,CACAxC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIiC,GAAI,CACAxC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,KACXM,QAAS,SAGjB,CACIkC,GAAI,CACAzC,SAAU,MACVC,UAAW,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,IACXM,QAAS,SAGjB,CACI,UAAW,CACPP,SAAU,UACVC,UAAW,IACXM,QAAS,SAGjB,CACI,MAAO,CACHP,SAAU,MACVC,UAAW,OAGnB,CACI,gBAAiB,CACbD,SAAU,gBACVC,UAAW,MAGnB,CACI,iBAAkB,CACdD,SAAU,iBACVC,UAAW,MAGnB,CACI,SAAU,CACND,SAAU,SACVC,UAAW,MAGnB,CACI,aAAc,CACVD,SAAU,aACVC,UAAW,MAGnB,CACI,UAAW,CACPD,SAAU,cACVC,UAAW,MAGnB,CACI,cAAe,CACXD,SAAU,cACVC,UAAW,MAGnB,CACI,SAAU,CACND,SAAU,SACVC,UAAW,MAGnB,CACI,iBAAkB,CACdD,SAAU,iBACVC,UAAW,MAGnB,CACI,kBAAmB,CACfD,SAAU,kBACVC,UAAW,MAGnB,CACI,SAAU,CACND,SAAU,SACVC,UAAW,MAGnB,CACI,iBAAkB,CACdD,SAAU,iBACVC,UAAW,MAGnB,CACI,kBAAmB,CACfD,SAAU,kBACVC,UAAW,MAGnB,CACI,SAAU,CACND,SAAU,SACVC,UAAW,MAGnB,CACI,iBAAkB,CACdD,SAAU,iBACVC,UAAW,MAGnB,CACI,kBAAmB,CACfD,SAAU,kBACVC,UAAW,MAGnB,CACI,YAAa,CACTD,SAAU,YACVC,UAAW,MAGnB,CACI,QAAS,CACLD,SAAU,QACVC,UAAW,UCpjFxB8C,EAAU,CACjB,MAAO,CACH,MACA,sBACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,sBACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,MACA,MACA,MACA,sBACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,MAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,IAAO,CACH,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,GAAM,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,GAAM,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ,GAAM,CACF,KACA,KACA,KACA,KACA,KACA,MAEJ,GAAM,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KA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tgB,OAAO6I,eAAelL,KAAM,YAAa,CACrCyG,MAAOic,EAAYE,UACnBtX,YAAY,EACZC,UAAU,EACVF,cAAc,G,cCRtBhJ,OAAO6I,eAAezL,EAAS,aAAc,CAAEgH,OAAO,IACtDhH,EAAQkjB,oBAAiB,EAIzBljB,EAAQkjB,eAHR,WACI,OAAQ3iB,KAAK4iB,SACjB,C,cCJAvgB,OAAO6I,eAAezL,EAAS,aAAc,CAAEgH,OAAO,IACtDhH,EAAQojB,uBAAoB,EAG5BpjB,EAAQojB,kBAAoB,CACxB,GAAM,CACF,SAAY,CACR,aAAgB,CAAC,EACjB,aAAgB,CACZ,QACA,OACA,MACA,OACA,OACA,UACA,QACA,OACA,OACA,OACA,SACA,MACA,OACA,QACA,QACA,MACA,OACA,OACA,OACA,QACA,OACA,MACA,MACA,OACA,MACA,OACA,SACA,OACA,OACA,KACA,QACA,WACA,MACA,UACA,OACA,OACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,KACA,QACA,UACA,OACA,OACA,aACA,KACA,KACA,QACA,KACA,MACA,MACA,SACA,MACA,OACA,OACA,MACA,OACA,OACA,WACA,QACA,OACA,KACA,KACA,OACA,SACA,OACA,MACA,MACA,MACA,OACA,MACA,QACA,SACA,KACA,OACA,UACA,QACA,QACA,QACA,SACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,KACA,QACA,OACA,MACA,SACA,OACA,OACA,OACA,QACA,OACA,KACA,OACA,MACA,OACA,SACA,SACA,KACA,OACA,UACA,OACA,OACA,OACA,OACA,QACA,WACA,OACA,OACA,QACA,OACA,KACA,QACA,OACA,OACA,OACA,SACA,WACA,OACA,QACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,QACA,QACA,QACA,WACA,OACA,KACA,aACA,OACA,QACA,MACA,OACA,KACA,KACA,OACA,OACA,QACA,OACA,QACA,QACA,KACA,SACA,QACA,MACA,OACA,YACA,OACA,UACA,OACA,OACA,QACA,QACA,OACA,OACA,OACA,QACA,OACA,MACA,QACA,OACA,QACA,OACA,OACA,QACA,OACA,KACA,QACA,QACA,MACA,OACA,SACA,SACA,QACA,KACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,SACA,OACA,MACA,OACA,QACA,YACA,MACA,SACA,OACA,QACA,OACA,KACA,WACA,SACA,QACA,OACA,OACA,KACA,QACA,OACA,OACA,OACA,OACA,QACA,MACA,KACA,QACA,KACA,aACA,aACA,OACA,OACA,OACA,KACA,OACA,OACA,OACA,KACA,SACA,QACA,YACA,OACA,SACA,WAEJ,UAAa,CAAC,IAGtB,GAAM,CACF,SAAY,CACR,aAAgB,CAAC,EACjB,aAAgB,GAChB,UAAa,CACT,OAAU,0wKAItB,GAAM,CACF,SAAY,CACR,aAAgB,CAAC,EACjB,aAAgB,CACZ,OACA,OACA,UACA,OACA,KACA,OACA,QACA,OACA,OACA,OACA,QACA,OACA,QACA,MACA,QACA,OACA,KACA,QACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,OACA,OACA,KACA,OACA,MACA,OACA,OACA,SACA,MACA,OACA,MACA,QACA,KACA,QACA,MACA,OACA,MACA,MACA,KACA,KACA,MACA,OACA,OACA,OACA,QACA,OACA,OACA,QACA,OACA,OACA,QACA,OACA,OACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,QACA,OACA,OACA,MACA,KACA,SACA,MACA,KACA,OACA,SACA,QACA,OACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,KACA,QACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,OACA,SACA,OACA,UACA,OACA,KACA,MACA,OACA,MACA,MACA,QACA,MACA,OACA,QACA,WACA,KACA,MACA,MACA,OACA,OACA,MACA,MACA,KACA,SACA,KACA,OACA,QACA,MACA,MACA,KACA,OACA,MACA,OACA,KACA,OACA,OACA,KACA,OACA,OACA,OACA,OACA,SACA,OACA,MACA,OACA,MACA,OAEJ,UAAa,CAAC,IAGtB,GAAM,CACF,SAAY,CACR,aAAgB,CAAC,EACjB,aAAgB,CACZ,QACA,SACA,QACA,OACA,OACA,SACA,OACA,OACA,OACA,OACA,SACA,QACA,UACA,OACA,OACA,SACA,MACA,OACA,QACA,MACA,SACA,MACA,QACA,OACA,OACA,OACA,SACA,OACA,OACA,UACA,QACA,OACA,MACA,OACA,MACA,OACA,QACA,OACA,QACA,MACA,OACA,QACA,OACA,MACA,SACA,QACA,OACA,QACA,OACA,MACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,OACA,SACA,OACA,OACA,QACA,OACA,QACA,QACA,MACA,SACA,OACA,MACA,OACA,OACA,QACA,SACA,QACA,SACA,QACA,SACA,MACA,KACA,QACA,MACA,QACA,QACA,QACA,QACA,KACA,OACA,SACA,OACA,QACA,MACA,OACA,SACA,OACA,OACA,KACA,KACA,OACA,OACA,UACA,MACA,QACA,SACA,OACA,SACA,QACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,OACA,SACA,OACA,MACA,QACA,QACA,SACA,OACA,QACA,OACA,OACA,OACA,UACA,QACA,OACA,OACA,OACA,MACA,MACA,OACA,OACA,UACA,MACA,QACA,OACA,OACA,QACA,OACA,QACA,KACA,OACA,MACA,QACA,QACA,QACA,OACA,QACA,QACA,SACA,WACA,QACA,SACA,MACA,OACA,MACA,QACA,OACA,QAEJ,UAAa,CAAC,IAGtB,GAAM,CACF,SAAY,CACR,aAAgB,CAAC,EACjB,aAAgB,CACZ,OACA,UACA,UACA,KACA,OACA,UACA,OACA,QACA,QACA,MACA,OACA,OACA,OACA,QACA,QACA,SACA,OACA,QACA,KACA,OACA,QACA,MACA,SACA,OACA,MACA,OACA,QACA,OACA,SACA,OACA,QACA,QACA,OACA,QACA,QACA,QACA,SACA,MACA,SACA,WACA,UACA,OACA,KACA,OACA,OACA,aACA,QACA,OACA,OACA,QACA,WACA,OACA,QACA,UACA,OACA,QACA,OACA,KACA,OACA,OACA,OACA,KACA,UACA,OACA,SACA,QACA,OACA,OACA,SACA,OACA,UACA,OACA,OACA,KACA,SACA,QACA,YACA,KACA,MACA,YACA,QACA,eAEJ,UAAa,CAAC,IAGtB,GAAM,CACF,SAAY,CACR,aAAgB,CAAC,EACjB,aAAgB,CACZ,OACA,OACA,OACA,OACA,SACA,SACA,OACA,OACA,QACA,SACA,SACA,OACA,SACA,QACA,QACA,OACA,SACA,OACA,OACA,OACA,OACA,MACA,OACA,SACA,MACA,QACA,OACA,OACA,MACA,OACA,MACA,KACA,OACA,aACA,OACA,OACA,OACA,OACA,KACA,SACA,OACA,OACA,SACA,OACA,MAEJ,UAAa,CAAC,IAGtB,GAAM,CACF,KAAQ,CACJ,aAAgB,CACZ,KAAQ,CACJ,MAAS,YACT,OAAU,YACV,QAAU,GAEd,KAAQ,CACJ,MAAS,eACT,OAAU,eACV,QAAU,IAGlB,aAAgB,GAChB,UAAa,CACT,UAAa,w7IACb,aAAgB,w8JAI5B,GAAM,CACF,SAAY,CACR,aAAgB,CAAC,EACjB,aAAgB,CACZ,UACA,OACA,SACA,OACA,OACA,OACA,UACA,QACA,UACA,QACA,WACA,QACA,OACA,OACA,QACA,UACA,OACA,MACA,OACA,QACA,OACA,MACA,QACA,OACA,KACA,UACA,MACA,KACA,OACA,OACA,OACA,SACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,QACA,OACA,OACA,OACA,KACA,OACA,QACA,SACA,OACA,OACA,QACA,OACA,OACA,QACA,QACA,OACA,QACA,UACA,OACA,QACA,MACA,OACA,SACA,OACA,QACA,MACA,OACA,OACA,SACA,SACA,WACA,OACA,OACA,SACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,KACA,OACA,WACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,SACA,QACA,SACA,WACA,QACA,MACA,QACA,OACA,MACA,OACA,OACA,OACA,QACA,MACA,OACA,QACA,OACA,SACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,SACA,OACA,OACA,KACA,OACA,OACA,SACA,OACA,QACA,OACA,MACA,QACA,MACA,WACA,QACA,SACA,KACA,QACA,OACA,OACA,SACA,MACA,MACA,OACA,OACA,UACA,QACA,OACA,QACA,OACA,OACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,SACA,QACA,OACA,OACA,OACA,MACA,OACA,OACA,UACA,OACA,OACA,QACA,aACA,QACA,SAEJ,UAAa,CAAC,IAGtB,KAAQ,CACJ,SAAY,CACR,aAAgB,CACZ,GAAM,CACF,MAAS,WACT,OAAU,uBACV,QAAU,GAEd,GAAM,CACF,MAAS,MACT,OAAU,gBACV,QAAU,GAEd,GAAM,CACF,MAAS,MACT,OAAU,iCACV,QAAU,GAEd,EAAK,CACD,MAAS,MACT,OAAU,MACV,QAAU,GAEd,EAAK,CACD,OAAU,qBACV,QAAU,GAEd,EAAK,CACD,MAAS,qBACT,QAAU,GAEd,EAAK,CACD,MAAS,mBACT,OAAU,KACV,QAAU,GAEd,EAAK,CACD,MAAS,UACT,OAAU,WACV,QAAU,GAEd,EAAK,CACD,MAAS,KACT,OAAU,YACV,QAAU,GAEd,EAAK,CACD,MAAS,iBACT,QAAU,GAEd,IAAO,CACH,MAAS,eACT,QAAU,GAEd,IAAO,CACH,OAAU,WACV,QAAU,GAEd,IAAO,CACH,MAAS,oBACT,OAAU,iDACV,QAAU,IAGlB,aAAgB,GAChB,UAAa,CACT,IAAO,MACP,SAAY,+SACZ,WAAc,4pEACd,SAAY,g6BACZ,QAAW,46IACX,GAAM,mCACN,IAAO,MACP,IAAO,8uFACP,KAAQ,s2LACR,kBAAqB,8VACrB,SAAY,8KACZ,IAAO,+BACP,aAAgB,m5DAChB,GAAM,mCACN,GAAM,mCACN,QAAW,+CACX,KAAQ,YAGhB,SAAY,CACR,aAAgB,CACZ,GAAM,CACF,MAAS,iBACT,OAAU,qBACV,QAAU,GAEd,GAAM,CACF,OAAU,8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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/262.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/GetOption.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/GetStringOrBooleanOption.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ApplyUnsignedRoundingMode.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CollapseNumberRange.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/utils.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatApproximately.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberRangePattern.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRange.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericRangeToParts.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/GetUnsignedRoundingMode.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js","webpack://tinode/./node_modules/@formatjs/ecma402-abstract/lib/data.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/languageMatching.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/regions.generated.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/BestFitMatcher.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/BestAvailableLocale.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/UnicodeExtensionValue.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/ResolveLocale.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupMatcher.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/LookupSupportedLocales.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/index.js","webpack://tinode/./node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeLocaleList.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/polyfill.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/should-polyfill.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/src/cldr-segmentation-rules.generated.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/src/segmentation-utils.js","webpack://tinode/./node_modules/@formatjs/intl-segmenter/src/segmenter.js","webpack://tinode/./src/drafty.js","webpack://tinode/./node_modules/tslib/tslib.es6.mjs","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/access-mode.js","webpack://tinode/./version.js","webpack://tinode/./src/config.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/utils.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/tinode.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/topic.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, () => {\nreturn ","/**\n * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist\n * @param locales\n */\nexport function CanonicalizeLocaleList(locales) {\n // TODO\n return Intl.getCanonicalLocales(locales);\n}\n","/**\n * https://tc39.es/ecma402/#sec-canonicalizetimezonename\n * @param tz\n */\nexport function CanonicalizeTimeZoneName(tz, _a) {\n var zoneNames = _a.zoneNames, uppercaseLinks = _a.uppercaseLinks;\n var uppercasedTz = tz.toUpperCase();\n var uppercasedZones = zoneNames.reduce(function (all, z) {\n all[z.toUpperCase()] = z;\n return all;\n }, {});\n var ianaTimeZone = uppercaseLinks[uppercasedTz] || uppercasedZones[uppercasedTz];\n if (ianaTimeZone === 'Etc/UTC' || ianaTimeZone === 'Etc/GMT') {\n return 'UTC';\n }\n return ianaTimeZone;\n}\n","/**\n * https://tc39.es/ecma262/#sec-tostring\n */\nexport function ToString(o) {\n // Only symbol is irregular...\n if (typeof o === 'symbol') {\n throw TypeError('Cannot convert a Symbol value to a string');\n }\n return String(o);\n}\n/**\n * https://tc39.es/ecma262/#sec-tonumber\n * @param val\n */\nexport function ToNumber(val) {\n if (val === undefined) {\n return NaN;\n }\n if (val === null) {\n return +0;\n }\n if (typeof val === 'boolean') {\n return val ? 1 : +0;\n }\n if (typeof val === 'number') {\n return val;\n }\n if (typeof val === 'symbol' || typeof val === 'bigint') {\n throw new TypeError('Cannot convert symbol/bigint to number');\n }\n return Number(val);\n}\n/**\n * https://tc39.es/ecma262/#sec-tointeger\n * @param n\n */\nfunction ToInteger(n) {\n var number = ToNumber(n);\n if (isNaN(number) || SameValue(number, -0)) {\n return 0;\n }\n if (isFinite(number)) {\n return number;\n }\n var integer = Math.floor(Math.abs(number));\n if (number < 0) {\n integer = -integer;\n }\n if (SameValue(integer, -0)) {\n return 0;\n }\n return integer;\n}\n/**\n * https://tc39.es/ecma262/#sec-timeclip\n * @param time\n */\nexport function TimeClip(time) {\n if (!isFinite(time)) {\n return NaN;\n }\n if (Math.abs(time) > 8.64 * 1e15) {\n return NaN;\n }\n return ToInteger(time);\n}\n/**\n * https://tc39.es/ecma262/#sec-toobject\n * @param arg\n */\nexport function ToObject(arg) {\n if (arg == null) {\n throw new TypeError('undefined/null cannot be converted to object');\n }\n return Object(arg);\n}\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-samevalue\n * @param x\n * @param y\n */\nexport function SameValue(x, y) {\n if (Object.is) {\n return Object.is(x, y);\n }\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n }\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n}\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-arraycreate\n * @param len\n */\nexport function ArrayCreate(len) {\n return new Array(len);\n}\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-hasownproperty\n * @param o\n * @param prop\n */\nexport function HasOwnProperty(o, prop) {\n return Object.prototype.hasOwnProperty.call(o, prop);\n}\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-type\n * @param x\n */\nexport function Type(x) {\n if (x === null) {\n return 'Null';\n }\n if (typeof x === 'undefined') {\n return 'Undefined';\n }\n if (typeof x === 'function' || typeof x === 'object') {\n return 'Object';\n }\n if (typeof x === 'number') {\n return 'Number';\n }\n if (typeof x === 'boolean') {\n return 'Boolean';\n }\n if (typeof x === 'string') {\n return 'String';\n }\n if (typeof x === 'symbol') {\n return 'Symbol';\n }\n if (typeof x === 'bigint') {\n return 'BigInt';\n }\n}\nvar MS_PER_DAY = 86400000;\n/**\n * https://www.ecma-international.org/ecma-262/11.0/index.html#eqn-modulo\n * @param x\n * @param y\n * @return k of the same sign as y\n */\nfunction mod(x, y) {\n return x - Math.floor(x / y) * y;\n}\n/**\n * https://tc39.es/ecma262/#eqn-Day\n * @param t\n */\nexport function Day(t) {\n return Math.floor(t / MS_PER_DAY);\n}\n/**\n * https://tc39.es/ecma262/#sec-week-day\n * @param t\n */\nexport function WeekDay(t) {\n return mod(Day(t) + 4, 7);\n}\n/**\n * https://tc39.es/ecma262/#sec-year-number\n * @param y\n */\nexport function DayFromYear(y) {\n return Date.UTC(y, 0) / MS_PER_DAY;\n}\n/**\n * https://tc39.es/ecma262/#sec-year-number\n * @param y\n */\nexport function TimeFromYear(y) {\n return Date.UTC(y, 0);\n}\n/**\n * https://tc39.es/ecma262/#sec-year-number\n * @param t\n */\nexport function YearFromTime(t) {\n return new Date(t).getUTCFullYear();\n}\nexport function DaysInYear(y) {\n if (y % 4 !== 0) {\n return 365;\n }\n if (y % 100 !== 0) {\n return 366;\n }\n if (y % 400 !== 0) {\n return 365;\n }\n return 366;\n}\nexport function DayWithinYear(t) {\n return Day(t) - DayFromYear(YearFromTime(t));\n}\nexport function InLeapYear(t) {\n return DaysInYear(YearFromTime(t)) === 365 ? 0 : 1;\n}\n/**\n * https://tc39.es/ecma262/#sec-month-number\n * @param t\n */\nexport function MonthFromTime(t) {\n var dwy = DayWithinYear(t);\n var leap = InLeapYear(t);\n if (dwy >= 0 && dwy < 31) {\n return 0;\n }\n if (dwy < 59 + leap) {\n return 1;\n }\n if (dwy < 90 + leap) {\n return 2;\n }\n if (dwy < 120 + leap) {\n return 3;\n }\n if (dwy < 151 + leap) {\n return 4;\n }\n if (dwy < 181 + leap) {\n return 5;\n }\n if (dwy < 212 + leap) {\n return 6;\n }\n if (dwy < 243 + leap) {\n return 7;\n }\n if (dwy < 273 + leap) {\n return 8;\n }\n if (dwy < 304 + leap) {\n return 9;\n }\n if (dwy < 334 + leap) {\n return 10;\n }\n if (dwy < 365 + leap) {\n return 11;\n }\n throw new Error('Invalid time');\n}\nexport function DateFromTime(t) {\n var dwy = DayWithinYear(t);\n var mft = MonthFromTime(t);\n var leap = InLeapYear(t);\n if (mft === 0) {\n return dwy + 1;\n }\n if (mft === 1) {\n return dwy - 30;\n }\n if (mft === 2) {\n return dwy - 58 - leap;\n }\n if (mft === 3) {\n return dwy - 89 - leap;\n }\n if (mft === 4) {\n return dwy - 119 - leap;\n }\n if (mft === 5) {\n return dwy - 150 - leap;\n }\n if (mft === 6) {\n return dwy - 180 - leap;\n }\n if (mft === 7) {\n return dwy - 211 - leap;\n }\n if (mft === 8) {\n return dwy - 242 - leap;\n }\n if (mft === 9) {\n return dwy - 272 - leap;\n }\n if (mft === 10) {\n return dwy - 303 - leap;\n }\n if (mft === 11) {\n return dwy - 333 - leap;\n }\n throw new Error('Invalid time');\n}\nvar HOURS_PER_DAY = 24;\nvar MINUTES_PER_HOUR = 60;\nvar SECONDS_PER_MINUTE = 60;\nvar MS_PER_SECOND = 1e3;\nvar MS_PER_MINUTE = MS_PER_SECOND * SECONDS_PER_MINUTE;\nvar MS_PER_HOUR = MS_PER_MINUTE * MINUTES_PER_HOUR;\nexport function HourFromTime(t) {\n return mod(Math.floor(t / MS_PER_HOUR), HOURS_PER_DAY);\n}\nexport function MinFromTime(t) {\n return mod(Math.floor(t / MS_PER_MINUTE), MINUTES_PER_HOUR);\n}\nexport function SecFromTime(t) {\n return mod(Math.floor(t / MS_PER_SECOND), SECONDS_PER_MINUTE);\n}\nfunction IsCallable(fn) {\n return typeof fn === 'function';\n}\n/**\n * The abstract operation OrdinaryHasInstance implements\n * the default algorithm for determining if an object O\n * inherits from the instance object inheritance path\n * provided by constructor C.\n * @param C class\n * @param O object\n * @param internalSlots internalSlots\n */\nexport function OrdinaryHasInstance(C, O, internalSlots) {\n if (!IsCallable(C)) {\n return false;\n }\n if (internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction) {\n var BC = internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction;\n return O instanceof BC;\n }\n if (typeof O !== 'object') {\n return false;\n }\n var P = C.prototype;\n if (typeof P !== 'object') {\n throw new TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');\n }\n return Object.prototype.isPrototypeOf.call(P, O);\n}\nexport function msFromTime(t) {\n return mod(t, MS_PER_SECOND);\n}\n","import { ToObject } from './262';\n/**\n * https://tc39.es/ecma402/#sec-coerceoptionstoobject\n * @param options\n * @returns\n */\nexport function CoerceOptionsToObject(options) {\n if (typeof options === 'undefined') {\n return Object.create(null);\n }\n return ToObject(options);\n}\n","/**\n * https://tc39.es/ecma402/#sec-defaultnumberoption\n * @param val\n * @param min\n * @param max\n * @param fallback\n */\nexport function DefaultNumberOption(inputVal, min, max, fallback) {\n if (inputVal === undefined) {\n // @ts-expect-error\n return fallback;\n }\n var val = Number(inputVal);\n if (isNaN(val) || val < min || val > max) {\n throw new RangeError(\"\".concat(val, \" is outside of range [\").concat(min, \", \").concat(max, \"]\"));\n }\n return Math.floor(val);\n}\n","/**\n * https://tc39.es/ecma402/#sec-getnumberoption\n * @param options\n * @param property\n * @param min\n * @param max\n * @param fallback\n */\nimport { DefaultNumberOption } from './DefaultNumberOption';\nexport function GetNumberOption(options, property, minimum, maximum, fallback) {\n var val = options[property];\n return DefaultNumberOption(val, minimum, maximum, fallback);\n}\n","import { ToString } from './262';\n/**\n * https://tc39.es/ecma402/#sec-getoption\n * @param opts\n * @param prop\n * @param type\n * @param values\n * @param fallback\n */\nexport function GetOption(opts, prop, type, values, fallback) {\n if (typeof opts !== 'object') {\n throw new TypeError('Options must be an object');\n }\n var value = opts[prop];\n if (value !== undefined) {\n if (type !== 'boolean' && type !== 'string') {\n throw new TypeError('invalid type');\n }\n if (type === 'boolean') {\n value = Boolean(value);\n }\n if (type === 'string') {\n value = ToString(value);\n }\n if (values !== undefined && !values.filter(function (val) { return val == value; }).length) {\n throw new RangeError(\"\".concat(value, \" is not within \").concat(values.join(', ')));\n }\n return value;\n }\n return fallback;\n}\n","/**\n * https://tc39.es/ecma402/#sec-getoptionsobject\n * @param options\n * @returns\n */\nexport function GetOptionsObject(options) {\n if (typeof options === 'undefined') {\n return Object.create(null);\n }\n if (typeof options === 'object') {\n return options;\n }\n throw new TypeError('Options must be an object');\n}\n","/**\n * https://tc39.es/ecma402/#sec-getstringorbooleanoption\n * @param opts\n * @param prop\n * @param values\n * @param trueValue\n * @param falsyValue\n * @param fallback\n */\nimport { ToString } from './262';\nexport function GetStringOrBooleanOption(opts, prop, values, trueValue, falsyValue, fallback) {\n var value = opts[prop];\n if (value === undefined) {\n return fallback;\n }\n if (value === true) {\n return trueValue;\n }\n var valueBoolean = Boolean(value);\n if (valueBoolean === false) {\n return falsyValue;\n }\n value = ToString(value);\n if (value === 'true' || value === 'false') {\n return fallback;\n }\n if ((values || []).indexOf(value) === -1) {\n throw new RangeError(\"Invalid value \".concat(value));\n }\n return value;\n}\n","/**\n * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers\n */\nexport var SANCTIONED_UNITS = [\n 'angle-degree',\n 'area-acre',\n 'area-hectare',\n 'concentr-percent',\n 'digital-bit',\n 'digital-byte',\n 'digital-gigabit',\n 'digital-gigabyte',\n 'digital-kilobit',\n 'digital-kilobyte',\n 'digital-megabit',\n 'digital-megabyte',\n 'digital-petabyte',\n 'digital-terabit',\n 'digital-terabyte',\n 'duration-day',\n 'duration-hour',\n 'duration-millisecond',\n 'duration-minute',\n 'duration-month',\n 'duration-second',\n 'duration-week',\n 'duration-year',\n 'length-centimeter',\n 'length-foot',\n 'length-inch',\n 'length-kilometer',\n 'length-meter',\n 'length-mile-scandinavian',\n 'length-mile',\n 'length-millimeter',\n 'length-yard',\n 'mass-gram',\n 'mass-kilogram',\n 'mass-ounce',\n 'mass-pound',\n 'mass-stone',\n 'temperature-celsius',\n 'temperature-fahrenheit',\n 'volume-fluid-ounce',\n 'volume-gallon',\n 'volume-liter',\n 'volume-milliliter',\n];\n// In CLDR, the unit name always follows the form `namespace-unit` pattern.\n// For example: `digital-bit` instead of `bit`. This function removes the namespace prefix.\nexport function removeUnitNamespace(unit) {\n return unit.slice(unit.indexOf('-') + 1);\n}\n/**\n * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers\n */\nexport var SIMPLE_UNITS = SANCTIONED_UNITS.map(removeUnitNamespace);\n/**\n * https://tc39.es/ecma402/#sec-issanctionedsimpleunitidentifier\n */\nexport function IsSanctionedSimpleUnitIdentifier(unitIdentifier) {\n return SIMPLE_UNITS.indexOf(unitIdentifier) > -1;\n}\n","/**\n * https://tc39.es/ecma402/#sec-isvalidtimezonename\n * @param tz\n * @param implDetails implementation details\n */\nexport function IsValidTimeZoneName(tz, _a) {\n var zoneNamesFromData = _a.zoneNamesFromData, uppercaseLinks = _a.uppercaseLinks;\n var uppercasedTz = tz.toUpperCase();\n var zoneNames = new Set();\n var linkNames = new Set();\n zoneNamesFromData.map(function (z) { return z.toUpperCase(); }).forEach(function (z) { return zoneNames.add(z); });\n Object.keys(uppercaseLinks).forEach(function (linkName) {\n linkNames.add(linkName.toUpperCase());\n zoneNames.add(uppercaseLinks[linkName].toUpperCase());\n });\n return zoneNames.has(uppercasedTz) || linkNames.has(uppercasedTz);\n}\n","/**\n * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping\n * @param str string to convert\n */\nfunction toUpperCase(str) {\n return str.replace(/([a-z])/g, function (_, c) { return c.toUpperCase(); });\n}\nvar NOT_A_Z_REGEX = /[^A-Z]/;\n/**\n * https://tc39.es/ecma402/#sec-iswellformedcurrencycode\n */\nexport function IsWellFormedCurrencyCode(currency) {\n currency = toUpperCase(currency);\n if (currency.length !== 3) {\n return false;\n }\n if (NOT_A_Z_REGEX.test(currency)) {\n return false;\n }\n return true;\n}\n","import { IsSanctionedSimpleUnitIdentifier } from './IsSanctionedSimpleUnitIdentifier';\n/**\n * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping\n * @param str string to convert\n */\nfunction toLowerCase(str) {\n return str.replace(/([A-Z])/g, function (_, c) { return c.toLowerCase(); });\n}\n/**\n * https://tc39.es/ecma402/#sec-iswellformedunitidentifier\n * @param unit\n */\nexport function IsWellFormedUnitIdentifier(unit) {\n unit = toLowerCase(unit);\n if (IsSanctionedSimpleUnitIdentifier(unit)) {\n return true;\n }\n var units = unit.split('-per-');\n if (units.length !== 2) {\n return false;\n }\n var numerator = units[0], denominator = units[1];\n if (!IsSanctionedSimpleUnitIdentifier(numerator) ||\n !IsSanctionedSimpleUnitIdentifier(denominator)) {\n return false;\n }\n return true;\n}\n","export function ApplyUnsignedRoundingMode(x, r1, r2, unsignedRoundingMode) {\n if (x === r1)\n return r1;\n if (unsignedRoundingMode === undefined) {\n throw new Error('unsignedRoundingMode is mandatory');\n }\n if (unsignedRoundingMode === 'zero') {\n return r1;\n }\n if (unsignedRoundingMode === 'infinity') {\n return r2;\n }\n var d1 = x - r1;\n var d2 = r2 - x;\n if (d1 < d2) {\n return r1;\n }\n if (d2 < d1) {\n return r2;\n }\n if (d1 !== d2) {\n throw new Error('Unexpected error');\n }\n if (unsignedRoundingMode === 'half-zero') {\n return r1;\n }\n if (unsignedRoundingMode === 'half-infinity') {\n return r2;\n }\n if (unsignedRoundingMode !== 'half-even') {\n throw new Error(\"Unexpected value for unsignedRoundingMode: \".concat(unsignedRoundingMode));\n }\n var cardinality = (r1 / (r2 - r1)) % 2;\n if (cardinality === 0) {\n return r1;\n }\n return r2;\n}\n","/**\n * https://tc39.es/ecma402/#sec-collapsenumberrange\n */\nexport function CollapseNumberRange(result) {\n return result;\n}\n","/**\n * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue\n * @param x number\n */\nexport function getMagnitude(x) {\n // Cannot count string length via Number.toString because it may use scientific notation\n // for very small or very large numbers.\n return Math.floor(Math.log(x) * Math.LOG10E);\n}\nexport function repeat(s, times) {\n if (typeof s.repeat === 'function') {\n return s.repeat(times);\n }\n var arr = new Array(times);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = s;\n }\n return arr.join('');\n}\nexport function setInternalSlot(map, pl, field, value) {\n if (!map.get(pl)) {\n map.set(pl, Object.create(null));\n }\n var slots = map.get(pl);\n slots[field] = value;\n}\nexport function setMultiInternalSlots(map, pl, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var k = _a[_i];\n setInternalSlot(map, pl, k, props[k]);\n }\n}\nexport function getInternalSlot(map, pl, field) {\n return getMultiInternalSlots(map, pl, field)[field];\n}\nexport function getMultiInternalSlots(map, pl) {\n var fields = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n fields[_i - 2] = arguments[_i];\n }\n var slots = map.get(pl);\n if (!slots) {\n throw new TypeError(\"\".concat(pl, \" InternalSlot has not been initialized\"));\n }\n return fields.reduce(function (all, f) {\n all[f] = slots[f];\n return all;\n }, Object.create(null));\n}\nexport function isLiteralPart(patternPart) {\n return patternPart.type === 'literal';\n}\n/*\n 17 ECMAScript Standard Built-in Objects:\n Every built-in Function object, including constructors, that is not\n identified as an anonymous function has a name property whose value\n is a String.\n\n Unless otherwise specified, the name property of a built-in Function\n object, if it exists, has the attributes { [[Writable]]: false,\n [[Enumerable]]: false, [[Configurable]]: true }.\n*/\nexport function defineProperty(target, name, _a) {\n var value = _a.value;\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: value,\n });\n}\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n if (Err === void 0) { Err = Error; }\n if (!condition) {\n throw new Err(message);\n }\n}\n","/**\n * The abstract operation ComputeExponentForMagnitude computes an exponent by which to scale a\n * number of the given magnitude (power of ten of the most significant digit) according to the\n * locale and the desired notation (scientific, engineering, or compact).\n */\nexport function ComputeExponentForMagnitude(numberFormat, magnitude, _a) {\n var getInternalSlots = _a.getInternalSlots;\n var internalSlots = getInternalSlots(numberFormat);\n var notation = internalSlots.notation, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;\n switch (notation) {\n case 'standard':\n return 0;\n case 'scientific':\n return magnitude;\n case 'engineering':\n return Math.floor(magnitude / 3) * 3;\n default: {\n // Let exponent be an implementation- and locale-dependent (ILD) integer by which to scale a\n // number of the given magnitude in compact notation for the current locale.\n var compactDisplay = internalSlots.compactDisplay, style = internalSlots.style, currencyDisplay = internalSlots.currencyDisplay;\n var thresholdMap = void 0;\n if (style === 'currency' && currencyDisplay !== 'name') {\n var currency = dataLocaleData.numbers.currency[numberingSystem] ||\n dataLocaleData.numbers.currency[dataLocaleData.numbers.nu[0]];\n thresholdMap = currency.short;\n }\n else {\n var decimal = dataLocaleData.numbers.decimal[numberingSystem] ||\n dataLocaleData.numbers.decimal[dataLocaleData.numbers.nu[0]];\n thresholdMap = compactDisplay === 'long' ? decimal.long : decimal.short;\n }\n if (!thresholdMap) {\n return 0;\n }\n var num = String(Math.pow(10, magnitude));\n var thresholds = Object.keys(thresholdMap); // TODO: this can be pre-processed\n if (num < thresholds[0]) {\n return 0;\n }\n if (num > thresholds[thresholds.length - 1]) {\n return thresholds[thresholds.length - 1].length - 1;\n }\n var i = thresholds.indexOf(num);\n if (i === -1) {\n return 0;\n }\n // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats\n // Special handling if the pattern is precisely `0`.\n var magnitudeKey = thresholds[i];\n // TODO: do we need to handle plural here?\n var compactPattern = thresholdMap[magnitudeKey].other;\n if (compactPattern === '0') {\n return 0;\n }\n // Example: in zh-TW, `10000000` maps to `0000萬`. So we need to return 8 - 4 = 4 here.\n return (magnitudeKey.length -\n thresholdMap[magnitudeKey].other.match(/0+/)[0].length);\n }\n }\n}\n","import { repeat, getMagnitude } from '../utils';\nexport function ToRawPrecision(x, minPrecision, maxPrecision) {\n var p = maxPrecision;\n var m;\n var e;\n var xFinal;\n if (x === 0) {\n m = repeat('0', p);\n e = 0;\n xFinal = 0;\n }\n else {\n var xToString = x.toString();\n // If xToString is formatted as scientific notation, the number is either very small or very\n // large. If the precision of the formatted string is lower that requested max precision, we\n // should still infer them from the formatted string, otherwise the formatted result might have\n // precision loss (e.g. 1e41 will not have 0 in every trailing digits).\n var xToStringExponentIndex = xToString.indexOf('e');\n var _a = xToString.split('e'), xToStringMantissa = _a[0], xToStringExponent = _a[1];\n var xToStringMantissaWithoutDecimalPoint = xToStringMantissa.replace('.', '');\n if (xToStringExponentIndex >= 0 &&\n xToStringMantissaWithoutDecimalPoint.length <= p) {\n e = +xToStringExponent;\n m =\n xToStringMantissaWithoutDecimalPoint +\n repeat('0', p - xToStringMantissaWithoutDecimalPoint.length);\n xFinal = x;\n }\n else {\n e = getMagnitude(x);\n var decimalPlaceOffset = e - p + 1;\n // n is the integer containing the required precision digits. To derive the formatted string,\n // we will adjust its decimal place in the logic below.\n var n = Math.round(adjustDecimalPlace(x, decimalPlaceOffset));\n // The rounding caused the change of magnitude, so we should increment `e` by 1.\n if (adjustDecimalPlace(n, p - 1) >= 10) {\n e = e + 1;\n // Divide n by 10 to swallow one precision.\n n = Math.floor(n / 10);\n }\n m = n.toString();\n // Equivalent of n * 10 ** (e - p + 1)\n xFinal = adjustDecimalPlace(n, p - 1 - e);\n }\n }\n var int;\n if (e >= p - 1) {\n m = m + repeat('0', e - p + 1);\n int = e + 1;\n }\n else if (e >= 0) {\n m = \"\".concat(m.slice(0, e + 1), \".\").concat(m.slice(e + 1));\n int = e + 1;\n }\n else {\n m = \"0.\".concat(repeat('0', -e - 1)).concat(m);\n int = 1;\n }\n if (m.indexOf('.') >= 0 && maxPrecision > minPrecision) {\n var cut = maxPrecision - minPrecision;\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, -1);\n cut--;\n }\n if (m[m.length - 1] === '.') {\n m = m.slice(0, -1);\n }\n }\n return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int };\n // x / (10 ** magnitude), but try to preserve as much floating point precision as possible.\n function adjustDecimalPlace(x, magnitude) {\n return magnitude < 0 ? x * Math.pow(10, -magnitude) : x / Math.pow(10, magnitude);\n }\n}\n","import { repeat } from '../utils';\n/**\n * TODO: dedup with intl-pluralrules and support BigInt\n * https://tc39.es/ecma402/#sec-torawfixed\n * @param x a finite non-negative Number or BigInt\n * @param minFraction and integer between 0 and 20\n * @param maxFraction and integer between 0 and 20\n */\nexport function ToRawFixed(x, minFraction, maxFraction) {\n var f = maxFraction;\n var n = Math.round(x * Math.pow(10, f));\n var xFinal = n / Math.pow(10, f);\n // n is a positive integer, but it is possible to be greater than 1e21.\n // In such case we will go the slow path.\n // See also: https://tc39.es/ecma262/#sec-numeric-types-number-tostring\n var m;\n if (n < 1e21) {\n m = n.toString();\n }\n else {\n m = n.toString();\n var _a = m.split('e'), mantissa = _a[0], exponent = _a[1];\n m = mantissa.replace('.', '');\n m = m + repeat('0', Math.max(+exponent - m.length + 1, 0));\n }\n var int;\n if (f !== 0) {\n var k = m.length;\n if (k <= f) {\n var z = repeat('0', f + 1 - k);\n m = z + m;\n k = f + 1;\n }\n var a = m.slice(0, k - f);\n var b = m.slice(k - f);\n m = \"\".concat(a, \".\").concat(b);\n int = a.length;\n }\n else {\n int = m.length;\n }\n var cut = maxFraction - minFraction;\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, -1);\n cut--;\n }\n if (m[m.length - 1] === '.') {\n m = m.slice(0, -1);\n }\n return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int };\n}\n","import { SameValue } from '../262';\nimport { ToRawPrecision } from './ToRawPrecision';\nimport { repeat } from '../utils';\nimport { ToRawFixed } from './ToRawFixed';\n/**\n * https://tc39.es/ecma402/#sec-formatnumberstring\n */\nexport function FormatNumericToString(intlObject, x) {\n var isNegative = x < 0 || SameValue(x, -0);\n if (isNegative) {\n x = -x;\n }\n var result;\n var rourndingType = intlObject.roundingType;\n switch (rourndingType) {\n case 'significantDigits':\n result = ToRawPrecision(x, intlObject.minimumSignificantDigits, intlObject.maximumSignificantDigits);\n break;\n case 'fractionDigits':\n result = ToRawFixed(x, intlObject.minimumFractionDigits, intlObject.maximumFractionDigits);\n break;\n default:\n result = ToRawPrecision(x, 1, 2);\n if (result.integerDigitsCount > 1) {\n result = ToRawFixed(x, 0, 0);\n }\n break;\n }\n x = result.roundedNumber;\n var string = result.formattedString;\n var int = result.integerDigitsCount;\n var minInteger = intlObject.minimumIntegerDigits;\n if (int < minInteger) {\n var forwardZeros = repeat('0', minInteger - int);\n string = forwardZeros + string;\n }\n if (isNegative) {\n x = -x;\n }\n return { roundedNumber: x, formattedString: string };\n}\n","import { getMagnitude } from '../utils';\nimport { ComputeExponentForMagnitude } from './ComputeExponentForMagnitude';\nimport { FormatNumericToString } from './FormatNumericToString';\n/**\n * The abstract operation ComputeExponent computes an exponent (power of ten) by which to scale x\n * according to the number formatting settings. It handles cases such as 999 rounding up to 1000,\n * requiring a different exponent.\n *\n * NOT IN SPEC: it returns [exponent, magnitude].\n */\nexport function ComputeExponent(numberFormat, x, _a) {\n var getInternalSlots = _a.getInternalSlots;\n if (x === 0) {\n return [0, 0];\n }\n if (x < 0) {\n x = -x;\n }\n var magnitude = getMagnitude(x);\n var exponent = ComputeExponentForMagnitude(numberFormat, magnitude, {\n getInternalSlots: getInternalSlots,\n });\n // Preserve more precision by doing multiplication when exponent is negative.\n x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent);\n var formatNumberResult = FormatNumericToString(getInternalSlots(numberFormat), x);\n if (formatNumberResult.roundedNumber === 0) {\n return [exponent, magnitude];\n }\n var newMagnitude = getMagnitude(formatNumberResult.roundedNumber);\n if (newMagnitude === magnitude - exponent) {\n return [exponent, magnitude];\n }\n return [\n ComputeExponentForMagnitude(numberFormat, magnitude + 1, {\n getInternalSlots: getInternalSlots,\n }),\n magnitude + 1,\n ];\n}\n","import { HasOwnProperty } from '../262';\n/**\n * https://tc39.es/ecma402/#sec-currencydigits\n */\nexport function CurrencyDigits(c, _a) {\n var currencyDigitsData = _a.currencyDigitsData;\n return HasOwnProperty(currencyDigitsData, c)\n ? currencyDigitsData[c]\n : 2;\n}\n","/**\n * https://tc39.es/ecma402/#sec-formatapproximately\n */\nexport function FormatApproximately(numberFormat, result, _a) {\n var getInternalSlots = _a.getInternalSlots;\n var internalSlots = getInternalSlots(numberFormat);\n var symbols = internalSlots.dataLocaleData.numbers.symbols[internalSlots.numberingSystem];\n var approximatelySign = symbols.approximatelySign;\n result.push({ type: 'approximatelySign', value: approximatelySign });\n return result;\n}\n","export var digitMapping = {\n \"adlm\": [\n \"𞥐\",\n \"𞥑\",\n \"𞥒\",\n \"𞥓\",\n \"𞥔\",\n \"𞥕\",\n \"𞥖\",\n \"𞥗\",\n \"𞥘\",\n \"𞥙\"\n ],\n \"ahom\": [\n \"𑜰\",\n \"𑜱\",\n \"𑜲\",\n \"𑜳\",\n \"𑜴\",\n \"𑜵\",\n \"𑜶\",\n \"𑜷\",\n \"𑜸\",\n \"𑜹\"\n ],\n \"arab\": [\n \"٠\",\n \"١\",\n \"٢\",\n \"٣\",\n \"٤\",\n \"٥\",\n \"٦\",\n \"٧\",\n \"٨\",\n \"٩\"\n ],\n \"arabext\": [\n \"۰\",\n \"۱\",\n \"۲\",\n \"۳\",\n \"۴\",\n \"۵\",\n \"۶\",\n \"۷\",\n \"۸\",\n \"۹\"\n ],\n \"bali\": [\n \"᭐\",\n \"᭑\",\n \"᭒\",\n \"᭓\",\n \"᭔\",\n \"᭕\",\n \"᭖\",\n \"᭗\",\n \"᭘\",\n \"᭙\"\n ],\n \"beng\": [\n \"০\",\n \"১\",\n \"২\",\n \"৩\",\n \"৪\",\n \"৫\",\n \"৬\",\n \"৭\",\n \"৮\",\n \"৯\"\n ],\n \"bhks\": [\n \"𑱐\",\n \"𑱑\",\n \"𑱒\",\n \"𑱓\",\n \"𑱔\",\n \"𑱕\",\n \"𑱖\",\n \"𑱗\",\n \"𑱘\",\n \"𑱙\"\n ],\n \"brah\": [\n \"𑁦\",\n \"𑁧\",\n \"𑁨\",\n \"𑁩\",\n \"𑁪\",\n \"𑁫\",\n \"𑁬\",\n \"𑁭\",\n \"𑁮\",\n \"𑁯\"\n ],\n \"cakm\": [\n \"𑄶\",\n \"𑄷\",\n \"𑄸\",\n \"𑄹\",\n \"𑄺\",\n \"𑄻\",\n \"𑄼\",\n \"𑄽\",\n \"𑄾\",\n \"𑄿\"\n ],\n \"cham\": [\n \"꩐\",\n \"꩑\",\n \"꩒\",\n \"꩓\",\n \"꩔\",\n \"꩕\",\n \"꩖\",\n \"꩗\",\n \"꩘\",\n \"꩙\"\n ],\n \"deva\": [\n \"०\",\n \"१\",\n \"२\",\n \"३\",\n \"४\",\n \"५\",\n \"६\",\n \"७\",\n \"८\",\n \"९\"\n ],\n \"diak\": [\n \"𑥐\",\n \"𑥑\",\n \"𑥒\",\n \"𑥓\",\n \"𑥔\",\n \"𑥕\",\n \"𑥖\",\n \"𑥗\",\n \"𑥘\",\n \"𑥙\"\n ],\n \"fullwide\": [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\"\n ],\n \"gong\": [\n \"𑶠\",\n \"𑶡\",\n \"𑶢\",\n \"𑶣\",\n \"𑶤\",\n \"𑶥\",\n \"𑶦\",\n \"𑶧\",\n \"𑶨\",\n \"𑶩\"\n ],\n \"gonm\": [\n \"𑵐\",\n \"𑵑\",\n \"𑵒\",\n \"𑵓\",\n \"𑵔\",\n \"𑵕\",\n \"𑵖\",\n \"𑵗\",\n \"𑵘\",\n \"𑵙\"\n ],\n \"gujr\": [\n \"૦\",\n \"૧\",\n \"૨\",\n \"૩\",\n \"૪\",\n \"૫\",\n \"૬\",\n \"૭\",\n \"૮\",\n \"૯\"\n ],\n \"guru\": [\n \"੦\",\n \"੧\",\n \"੨\",\n \"੩\",\n \"੪\",\n \"੫\",\n \"੬\",\n \"੭\",\n \"੮\",\n \"੯\"\n ],\n \"hanidec\": [\n \"〇\",\n \"一\",\n \"二\",\n \"三\",\n \"四\",\n \"五\",\n \"六\",\n \"七\",\n \"八\",\n \"九\"\n ],\n \"hmng\": [\n \"𖭐\",\n \"𖭑\",\n \"𖭒\",\n \"𖭓\",\n \"𖭔\",\n \"𖭕\",\n \"𖭖\",\n \"𖭗\",\n \"𖭘\",\n \"𖭙\"\n ],\n \"hmnp\": [\n \"𞅀\",\n \"𞅁\",\n \"𞅂\",\n \"𞅃\",\n \"𞅄\",\n \"𞅅\",\n \"𞅆\",\n \"𞅇\",\n \"𞅈\",\n \"𞅉\"\n ],\n \"java\": [\n \"꧐\",\n \"꧑\",\n \"꧒\",\n \"꧓\",\n \"꧔\",\n \"꧕\",\n \"꧖\",\n \"꧗\",\n \"꧘\",\n \"꧙\"\n ],\n \"kali\": [\n \"꤀\",\n \"꤁\",\n \"꤂\",\n \"꤃\",\n \"꤄\",\n \"꤅\",\n \"꤆\",\n \"꤇\",\n \"꤈\",\n \"꤉\"\n ],\n \"khmr\": [\n \"០\",\n \"១\",\n \"២\",\n \"៣\",\n \"៤\",\n \"៥\",\n \"៦\",\n \"៧\",\n \"៨\",\n \"៩\"\n ],\n \"knda\": [\n \"೦\",\n \"೧\",\n \"೨\",\n \"೩\",\n \"೪\",\n \"೫\",\n \"೬\",\n \"೭\",\n \"೮\",\n \"೯\"\n ],\n \"lana\": [\n \"᪀\",\n \"᪁\",\n \"᪂\",\n \"᪃\",\n \"᪄\",\n \"᪅\",\n \"᪆\",\n \"᪇\",\n \"᪈\",\n \"᪉\"\n ],\n \"lanatham\": [\n \"᪐\",\n \"᪑\",\n \"᪒\",\n \"᪓\",\n \"᪔\",\n \"᪕\",\n \"᪖\",\n \"᪗\",\n \"᪘\",\n \"᪙\"\n ],\n \"laoo\": [\n \"໐\",\n \"໑\",\n \"໒\",\n \"໓\",\n \"໔\",\n \"໕\",\n \"໖\",\n \"໗\",\n \"໘\",\n \"໙\"\n ],\n \"lepc\": [\n \"᪐\",\n \"᪑\",\n \"᪒\",\n \"᪓\",\n \"᪔\",\n \"᪕\",\n \"᪖\",\n \"᪗\",\n \"᪘\",\n \"᪙\"\n ],\n \"limb\": [\n \"᥆\",\n \"᥇\",\n \"᥈\",\n \"᥉\",\n \"᥊\",\n \"᥋\",\n \"᥌\",\n \"᥍\",\n \"᥎\",\n \"᥏\"\n ],\n \"mathbold\": [\n \"𝟎\",\n \"𝟏\",\n \"𝟐\",\n \"𝟑\",\n \"𝟒\",\n \"𝟓\",\n \"𝟔\",\n \"𝟕\",\n \"𝟖\",\n \"𝟗\"\n ],\n \"mathdbl\": [\n \"𝟘\",\n \"𝟙\",\n \"𝟚\",\n \"𝟛\",\n \"𝟜\",\n \"𝟝\",\n \"𝟞\",\n \"𝟟\",\n \"𝟠\",\n \"𝟡\"\n ],\n \"mathmono\": [\n \"𝟶\",\n \"𝟷\",\n \"𝟸\",\n \"𝟹\",\n \"𝟺\",\n \"𝟻\",\n \"𝟼\",\n \"𝟽\",\n \"𝟾\",\n \"𝟿\"\n ],\n \"mathsanb\": [\n \"𝟬\",\n \"𝟭\",\n \"𝟮\",\n \"𝟯\",\n \"𝟰\",\n \"𝟱\",\n \"𝟲\",\n \"𝟳\",\n \"𝟴\",\n \"𝟵\"\n ],\n \"mathsans\": [\n \"𝟢\",\n \"𝟣\",\n \"𝟤\",\n \"𝟥\",\n \"𝟦\",\n \"𝟧\",\n \"𝟨\",\n \"𝟩\",\n \"𝟪\",\n \"𝟫\"\n ],\n \"mlym\": [\n \"൦\",\n \"൧\",\n \"൨\",\n \"൩\",\n \"൪\",\n \"൫\",\n \"൬\",\n \"൭\",\n \"൮\",\n \"൯\"\n ],\n \"modi\": [\n \"𑙐\",\n \"𑙑\",\n \"𑙒\",\n \"𑙓\",\n \"𑙔\",\n \"𑙕\",\n \"𑙖\",\n \"𑙗\",\n \"𑙘\",\n \"𑙙\"\n ],\n \"mong\": [\n \"᠐\",\n \"᠑\",\n \"᠒\",\n \"᠓\",\n \"᠔\",\n \"᠕\",\n \"᠖\",\n \"᠗\",\n \"᠘\",\n \"᠙\"\n ],\n \"mroo\": [\n \"𖩠\",\n \"𖩡\",\n \"𖩢\",\n \"𖩣\",\n \"𖩤\",\n \"𖩥\",\n \"𖩦\",\n \"𖩧\",\n \"𖩨\",\n \"𖩩\"\n ],\n \"mtei\": [\n \"꯰\",\n \"꯱\",\n \"꯲\",\n \"꯳\",\n \"꯴\",\n \"꯵\",\n \"꯶\",\n \"꯷\",\n \"꯸\",\n \"꯹\"\n ],\n \"mymr\": [\n \"၀\",\n \"၁\",\n \"၂\",\n \"၃\",\n \"၄\",\n \"၅\",\n \"၆\",\n \"၇\",\n \"၈\",\n \"၉\"\n ],\n \"mymrshan\": [\n \"႐\",\n \"႑\",\n \"႒\",\n \"႓\",\n \"႔\",\n \"႕\",\n \"႖\",\n \"႗\",\n \"႘\",\n \"႙\"\n ],\n \"mymrtlng\": [\n \"꧰\",\n \"꧱\",\n \"꧲\",\n \"꧳\",\n \"꧴\",\n \"꧵\",\n \"꧶\",\n \"꧷\",\n \"꧸\",\n \"꧹\"\n ],\n \"newa\": [\n \"𑑐\",\n \"𑑑\",\n \"𑑒\",\n \"𑑓\",\n \"𑑔\",\n \"𑑕\",\n \"𑑖\",\n \"𑑗\",\n \"𑑘\",\n \"𑑙\"\n ],\n \"nkoo\": [\n \"߀\",\n \"߁\",\n \"߂\",\n \"߃\",\n \"߄\",\n \"߅\",\n \"߆\",\n \"߇\",\n \"߈\",\n \"߉\"\n ],\n \"olck\": [\n \"᱐\",\n \"᱑\",\n \"᱒\",\n \"᱓\",\n \"᱔\",\n \"᱕\",\n \"᱖\",\n \"᱗\",\n \"᱘\",\n \"᱙\"\n ],\n \"orya\": [\n \"୦\",\n \"୧\",\n \"୨\",\n \"୩\",\n \"୪\",\n \"୫\",\n \"୬\",\n \"୭\",\n \"୮\",\n \"୯\"\n ],\n \"osma\": [\n \"𐒠\",\n \"𐒡\",\n \"𐒢\",\n \"𐒣\",\n \"𐒤\",\n \"𐒥\",\n \"𐒦\",\n \"𐒧\",\n \"𐒨\",\n \"𐒩\"\n ],\n \"rohg\": [\n \"𐴰\",\n \"𐴱\",\n \"𐴲\",\n \"𐴳\",\n \"𐴴\",\n \"𐴵\",\n \"𐴶\",\n \"𐴷\",\n \"𐴸\",\n \"𐴹\"\n ],\n \"saur\": [\n \"꣐\",\n \"꣑\",\n \"꣒\",\n \"꣓\",\n \"꣔\",\n \"꣕\",\n \"꣖\",\n \"꣗\",\n \"꣘\",\n \"꣙\"\n ],\n \"segment\": [\n \"🯰\",\n \"🯱\",\n \"🯲\",\n \"🯳\",\n \"🯴\",\n \"🯵\",\n \"🯶\",\n \"🯷\",\n \"🯸\",\n \"🯹\"\n ],\n \"shrd\": [\n \"𑇐\",\n \"𑇑\",\n \"𑇒\",\n \"𑇓\",\n \"𑇔\",\n \"𑇕\",\n \"𑇖\",\n \"𑇗\",\n \"𑇘\",\n \"𑇙\"\n ],\n \"sind\": [\n \"𑋰\",\n \"𑋱\",\n \"𑋲\",\n \"𑋳\",\n \"𑋴\",\n \"𑋵\",\n \"𑋶\",\n \"𑋷\",\n \"𑋸\",\n \"𑋹\"\n ],\n \"sinh\": [\n \"෦\",\n \"෧\",\n \"෨\",\n \"෩\",\n \"෪\",\n \"෫\",\n \"෬\",\n \"෭\",\n \"෮\",\n \"෯\"\n ],\n \"sora\": [\n \"𑃰\",\n \"𑃱\",\n \"𑃲\",\n \"𑃳\",\n \"𑃴\",\n \"𑃵\",\n \"𑃶\",\n \"𑃷\",\n \"𑃸\",\n \"𑃹\"\n ],\n \"sund\": [\n \"᮰\",\n \"᮱\",\n \"᮲\",\n \"᮳\",\n \"᮴\",\n \"᮵\",\n \"᮶\",\n \"᮷\",\n \"᮸\",\n \"᮹\"\n ],\n \"takr\": [\n \"𑛀\",\n \"𑛁\",\n \"𑛂\",\n \"𑛃\",\n \"𑛄\",\n \"𑛅\",\n \"𑛆\",\n \"𑛇\",\n \"𑛈\",\n \"𑛉\"\n ],\n \"talu\": [\n \"᧐\",\n \"᧑\",\n \"᧒\",\n \"᧓\",\n \"᧔\",\n \"᧕\",\n \"᧖\",\n \"᧗\",\n \"᧘\",\n \"᧙\"\n ],\n \"tamldec\": [\n \"௦\",\n \"௧\",\n \"௨\",\n \"௩\",\n \"௪\",\n \"௫\",\n \"௬\",\n \"௭\",\n \"௮\",\n \"௯\"\n ],\n \"telu\": [\n \"౦\",\n \"౧\",\n \"౨\",\n \"౩\",\n \"౪\",\n \"౫\",\n \"౬\",\n \"౭\",\n \"౮\",\n \"౯\"\n ],\n \"thai\": [\n \"๐\",\n \"๑\",\n \"๒\",\n \"๓\",\n \"๔\",\n \"๕\",\n \"๖\",\n \"๗\",\n \"๘\",\n \"๙\"\n ],\n \"tibt\": [\n \"༠\",\n \"༡\",\n \"༢\",\n \"༣\",\n \"༤\",\n \"༥\",\n \"༦\",\n \"༧\",\n \"༨\",\n \"༩\"\n ],\n \"tirh\": [\n \"𑓐\",\n \"𑓑\",\n \"𑓒\",\n \"𑓓\",\n \"𑓔\",\n \"𑓕\",\n \"𑓖\",\n \"𑓗\",\n \"𑓘\",\n \"𑓙\"\n ],\n \"vaii\": [\n \"ᘠ\",\n \"ᘡ\",\n \"ᘢ\",\n \"ᘣ\",\n \"ᘤ\",\n \"ᘥ\",\n \"ᘦ\",\n \"ᘧ\",\n \"ᘨ\",\n \"ᘩ\"\n ],\n \"wara\": [\n \"𑣠\",\n \"𑣡\",\n \"𑣢\",\n \"𑣣\",\n \"𑣤\",\n \"𑣥\",\n \"𑣦\",\n \"𑣧\",\n \"𑣨\",\n \"𑣩\"\n ],\n \"wcho\": [\n \"𞋰\",\n \"𞋱\",\n \"𞋲\",\n \"𞋳\",\n \"𞋴\",\n \"𞋵\",\n \"𞋶\",\n \"𞋷\",\n \"𞋸\",\n \"𞋹\"\n ]\n};\n","// @generated from regex-gen.ts\nexport var S_UNICODE_REGEX = /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20BF\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC1\\uFDFC\\uFDFD\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEE0-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6\\uDF00-\\uDF92\\uDF94-\\uDFCA]/;\n","import { ToRawFixed } from './ToRawFixed';\nimport { digitMapping } from './digit-mapping.generated';\nimport { S_UNICODE_REGEX } from '../regex.generated';\n// This is from: unicode-12.1.0/General_Category/Symbol/regex.js\n// IE11 does not support unicode flag, otherwise this is just /\\p{S}/u.\n// /^\\p{S}/u\nvar CARET_S_UNICODE_REGEX = new RegExp(\"^\".concat(S_UNICODE_REGEX.source));\n// /\\p{S}$/u\nvar S_DOLLAR_UNICODE_REGEX = new RegExp(\"\".concat(S_UNICODE_REGEX.source, \"$\"));\nvar CLDR_NUMBER_PATTERN = /[#0](?:[\\.,][#0]+)*/g;\nexport default function formatToParts(numberResult, data, pl, options) {\n var sign = numberResult.sign, exponent = numberResult.exponent, magnitude = numberResult.magnitude;\n var notation = options.notation, style = options.style, numberingSystem = options.numberingSystem;\n var defaultNumberingSystem = data.numbers.nu[0];\n // #region Part 1: partition and interpolate the CLDR number pattern.\n // ----------------------------------------------------------\n var compactNumberPattern = null;\n if (notation === 'compact' && magnitude) {\n compactNumberPattern = getCompactDisplayPattern(numberResult, pl, data, style, options.compactDisplay, options.currencyDisplay, numberingSystem);\n }\n // This is used multiple times\n var nonNameCurrencyPart;\n if (style === 'currency' && options.currencyDisplay !== 'name') {\n var byCurrencyDisplay = data.currencies[options.currency];\n if (byCurrencyDisplay) {\n switch (options.currencyDisplay) {\n case 'code':\n nonNameCurrencyPart = options.currency;\n break;\n case 'symbol':\n nonNameCurrencyPart = byCurrencyDisplay.symbol;\n break;\n default:\n nonNameCurrencyPart = byCurrencyDisplay.narrow;\n break;\n }\n }\n else {\n // Fallback for unknown currency\n nonNameCurrencyPart = options.currency;\n }\n }\n var numberPattern;\n if (!compactNumberPattern) {\n // Note: if the style is unit, or is currency and the currency display is name,\n // its unit parts will be interpolated in part 2. So here we can fallback to decimal.\n if (style === 'decimal' ||\n style === 'unit' ||\n (style === 'currency' && options.currencyDisplay === 'name')) {\n // Shortcut for decimal\n var decimalData = data.numbers.decimal[numberingSystem] ||\n data.numbers.decimal[defaultNumberingSystem];\n numberPattern = getPatternForSign(decimalData.standard, sign);\n }\n else if (style === 'currency') {\n var currencyData = data.numbers.currency[numberingSystem] ||\n data.numbers.currency[defaultNumberingSystem];\n // We replace number pattern part with `0` for easier postprocessing.\n numberPattern = getPatternForSign(currencyData[options.currencySign], sign);\n }\n else {\n // percent\n var percentPattern = data.numbers.percent[numberingSystem] ||\n data.numbers.percent[defaultNumberingSystem];\n numberPattern = getPatternForSign(percentPattern, sign);\n }\n }\n else {\n numberPattern = compactNumberPattern;\n }\n // Extract the decimal number pattern string. It looks like \"#,##0,00\", which will later be\n // used to infer decimal group sizes.\n var decimalNumberPattern = CLDR_NUMBER_PATTERN.exec(numberPattern)[0];\n // Now we start to substitute patterns\n // 1. replace strings like `0` and `#,##0.00` with `{0}`\n // 2. unquote characters (invariant: the quoted characters does not contain the special tokens)\n numberPattern = numberPattern\n .replace(CLDR_NUMBER_PATTERN, '{0}')\n .replace(/'(.)'/g, '$1');\n // Handle currency spacing (both compact and non-compact).\n if (style === 'currency' && options.currencyDisplay !== 'name') {\n var currencyData = data.numbers.currency[numberingSystem] ||\n data.numbers.currency[defaultNumberingSystem];\n // See `currencySpacing` substitution rule in TR-35.\n // Here we always assume the currencyMatch is \"[:^S:]\" and surroundingMatch is \"[:digit:]\".\n //\n // Example 1: for pattern \"#,##0.00¤\" with symbol \"US$\", we replace \"¤\" with the symbol,\n // but insert an extra non-break space before the symbol, because \"[:^S:]\" matches \"U\" in\n // \"US$\" and \"[:digit:]\" matches the latn numbering system digits.\n //\n // Example 2: for pattern \"¤#,##0.00\" with symbol \"US$\", there is no spacing between symbol\n // and number, because `$` does not match \"[:^S:]\".\n //\n // Implementation note: here we do the best effort to infer the insertion.\n // We also assume that `beforeInsertBetween` and `afterInsertBetween` will never be `;`.\n var afterCurrency = currencyData.currencySpacing.afterInsertBetween;\n if (afterCurrency && !S_DOLLAR_UNICODE_REGEX.test(nonNameCurrencyPart)) {\n numberPattern = numberPattern.replace('¤{0}', \"\\u00A4\".concat(afterCurrency, \"{0}\"));\n }\n var beforeCurrency = currencyData.currencySpacing.beforeInsertBetween;\n if (beforeCurrency && !CARET_S_UNICODE_REGEX.test(nonNameCurrencyPart)) {\n numberPattern = numberPattern.replace('{0}¤', \"{0}\".concat(beforeCurrency, \"\\u00A4\"));\n }\n }\n // The following tokens are special: `{0}`, `¤`, `%`, `-`, `+`, `{c:...}.\n var numberPatternParts = numberPattern.split(/({c:[^}]+}|\\{0\\}|[¤%\\-\\+])/g);\n var numberParts = [];\n var symbols = data.numbers.symbols[numberingSystem] ||\n data.numbers.symbols[defaultNumberingSystem];\n for (var _i = 0, numberPatternParts_1 = numberPatternParts; _i < numberPatternParts_1.length; _i++) {\n var part = numberPatternParts_1[_i];\n if (!part) {\n continue;\n }\n switch (part) {\n case '{0}': {\n // We only need to handle scientific and engineering notation here.\n numberParts.push.apply(numberParts, paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem, \n // If compact number pattern exists, do not insert group separators.\n !compactNumberPattern && Boolean(options.useGrouping), decimalNumberPattern));\n break;\n }\n case '-':\n numberParts.push({ type: 'minusSign', value: symbols.minusSign });\n break;\n case '+':\n numberParts.push({ type: 'plusSign', value: symbols.plusSign });\n break;\n case '%':\n numberParts.push({ type: 'percentSign', value: symbols.percentSign });\n break;\n case '¤':\n // Computed above when handling currency spacing.\n numberParts.push({ type: 'currency', value: nonNameCurrencyPart });\n break;\n default:\n if (/^\\{c:/.test(part)) {\n numberParts.push({\n type: 'compact',\n value: part.substring(3, part.length - 1),\n });\n }\n else {\n // literal\n numberParts.push({ type: 'literal', value: part });\n }\n break;\n }\n }\n // #endregion\n // #region Part 2: interpolate unit pattern if necessary.\n // ----------------------------------------------\n switch (style) {\n case 'currency': {\n // `currencyDisplay: 'name'` has similar pattern handling as units.\n if (options.currencyDisplay === 'name') {\n var unitPattern = (data.numbers.currency[numberingSystem] ||\n data.numbers.currency[defaultNumberingSystem]).unitPattern;\n // Select plural\n var unitName = void 0;\n var currencyNameData = data.currencies[options.currency];\n if (currencyNameData) {\n unitName = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), currencyNameData.displayName);\n }\n else {\n // Fallback for unknown currency\n unitName = options.currency;\n }\n // Do {0} and {1} substitution\n var unitPatternParts = unitPattern.split(/(\\{[01]\\})/g);\n var result = [];\n for (var _a = 0, unitPatternParts_1 = unitPatternParts; _a < unitPatternParts_1.length; _a++) {\n var part = unitPatternParts_1[_a];\n switch (part) {\n case '{0}':\n result.push.apply(result, numberParts);\n break;\n case '{1}':\n result.push({ type: 'currency', value: unitName });\n break;\n default:\n if (part) {\n result.push({ type: 'literal', value: part });\n }\n break;\n }\n }\n return result;\n }\n else {\n return numberParts;\n }\n }\n case 'unit': {\n var unit = options.unit, unitDisplay = options.unitDisplay;\n var unitData = data.units.simple[unit];\n var unitPattern = void 0;\n if (unitData) {\n // Simple unit pattern\n unitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[unit][unitDisplay]);\n }\n else {\n // See: http://unicode.org/reports/tr35/tr35-general.html#perUnitPatterns\n // If cannot find unit in the simple pattern, it must be \"per\" compound pattern.\n // Implementation note: we are not following TR-35 here because we need to format to parts!\n var _b = unit.split('-per-'), numeratorUnit = _b[0], denominatorUnit = _b[1];\n unitData = data.units.simple[numeratorUnit];\n var numeratorUnitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[numeratorUnit][unitDisplay]);\n var perUnitPattern = data.units.simple[denominatorUnit].perUnit[unitDisplay];\n if (perUnitPattern) {\n // perUnitPattern exists, combine it with numeratorUnitPattern\n unitPattern = perUnitPattern.replace('{0}', numeratorUnitPattern);\n }\n else {\n // get compoundUnit pattern (e.g. \"{0} per {1}\"), repalce {0} with numerator pattern and {1} with\n // the denominator pattern in singular form.\n var perPattern = data.units.compound.per[unitDisplay];\n var denominatorPattern = selectPlural(pl, 1, data.units.simple[denominatorUnit][unitDisplay]);\n unitPattern = unitPattern = perPattern\n .replace('{0}', numeratorUnitPattern)\n .replace('{1}', denominatorPattern.replace('{0}', ''));\n }\n }\n var result = [];\n // We need spacing around \"{0}\" because they are not treated as \"unit\" parts, but \"literal\".\n for (var _c = 0, _d = unitPattern.split(/(\\s*\\{0\\}\\s*)/); _c < _d.length; _c++) {\n var part = _d[_c];\n var interpolateMatch = /^(\\s*)\\{0\\}(\\s*)$/.exec(part);\n if (interpolateMatch) {\n // Space before \"{0}\"\n if (interpolateMatch[1]) {\n result.push({ type: 'literal', value: interpolateMatch[1] });\n }\n // \"{0}\" itself\n result.push.apply(result, numberParts);\n // Space after \"{0}\"\n if (interpolateMatch[2]) {\n result.push({ type: 'literal', value: interpolateMatch[2] });\n }\n }\n else if (part) {\n result.push({ type: 'unit', value: part });\n }\n }\n return result;\n }\n default:\n return numberParts;\n }\n // #endregion\n}\n// A subset of https://tc39.es/ecma402/#sec-partitionnotationsubpattern\n// Plus the exponent parts handling.\nfunction paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem, useGrouping, \n/**\n * This is the decimal number pattern without signs or symbols.\n * It is used to infer the group size when `useGrouping` is true.\n *\n * A typical value looks like \"#,##0.00\" (primary group size is 3).\n * Some locales like Hindi has secondary group size of 2 (e.g. \"#,##,##0.00\").\n */\ndecimalNumberPattern) {\n var result = [];\n // eslint-disable-next-line prefer-const\n var n = numberResult.formattedString, x = numberResult.roundedNumber;\n if (isNaN(x)) {\n return [{ type: 'nan', value: n }];\n }\n else if (!isFinite(x)) {\n return [{ type: 'infinity', value: n }];\n }\n var digitReplacementTable = digitMapping[numberingSystem];\n if (digitReplacementTable) {\n n = n.replace(/\\d/g, function (digit) { return digitReplacementTable[+digit] || digit; });\n }\n // TODO: Else use an implementation dependent algorithm to map n to the appropriate\n // representation of n in the given numbering system.\n var decimalSepIndex = n.indexOf('.');\n var integer;\n var fraction;\n if (decimalSepIndex > 0) {\n integer = n.slice(0, decimalSepIndex);\n fraction = n.slice(decimalSepIndex + 1);\n }\n else {\n integer = n;\n }\n // #region Grouping integer digits\n // The weird compact and x >= 10000 check is to ensure consistency with Node.js and Chrome.\n // Note that `de` does not have compact form for thousands, but Node.js does not insert grouping separator\n // unless the rounded number is greater than 10000:\n // NumberFormat('de', {notation: 'compact', compactDisplay: 'short'}).format(1234) //=> \"1234\"\n // NumberFormat('de').format(1234) //=> \"1.234\"\n if (useGrouping && (notation !== 'compact' || x >= 10000)) {\n var groupSepSymbol = symbols.group;\n var groups = [];\n // > There may be two different grouping sizes: The primary grouping size used for the least\n // > significant integer group, and the secondary grouping size used for more significant groups.\n // > If a pattern contains multiple grouping separators, the interval between the last one and the\n // > end of the integer defines the primary grouping size, and the interval between the last two\n // > defines the secondary grouping size. All others are ignored.\n var integerNumberPattern = decimalNumberPattern.split('.')[0];\n var patternGroups = integerNumberPattern.split(',');\n var primaryGroupingSize = 3;\n var secondaryGroupingSize = 3;\n if (patternGroups.length > 1) {\n primaryGroupingSize = patternGroups[patternGroups.length - 1].length;\n }\n if (patternGroups.length > 2) {\n secondaryGroupingSize = patternGroups[patternGroups.length - 2].length;\n }\n var i = integer.length - primaryGroupingSize;\n if (i > 0) {\n // Slice the least significant integer group\n groups.push(integer.slice(i, i + primaryGroupingSize));\n // Then iteratively push the more signicant groups\n // TODO: handle surrogate pairs in some numbering system digits\n for (i -= secondaryGroupingSize; i > 0; i -= secondaryGroupingSize) {\n groups.push(integer.slice(i, i + secondaryGroupingSize));\n }\n groups.push(integer.slice(0, i + secondaryGroupingSize));\n }\n else {\n groups.push(integer);\n }\n while (groups.length > 0) {\n var integerGroup = groups.pop();\n result.push({ type: 'integer', value: integerGroup });\n if (groups.length > 0) {\n result.push({ type: 'group', value: groupSepSymbol });\n }\n }\n }\n else {\n result.push({ type: 'integer', value: integer });\n }\n // #endregion\n if (fraction !== undefined) {\n result.push({ type: 'decimal', value: symbols.decimal }, { type: 'fraction', value: fraction });\n }\n if ((notation === 'scientific' || notation === 'engineering') &&\n isFinite(x)) {\n result.push({ type: 'exponentSeparator', value: symbols.exponential });\n if (exponent < 0) {\n result.push({ type: 'exponentMinusSign', value: symbols.minusSign });\n exponent = -exponent;\n }\n var exponentResult = ToRawFixed(exponent, 0, 0);\n result.push({\n type: 'exponentInteger',\n value: exponentResult.formattedString,\n });\n }\n return result;\n}\nfunction getPatternForSign(pattern, sign) {\n if (pattern.indexOf(';') < 0) {\n pattern = \"\".concat(pattern, \";-\").concat(pattern);\n }\n var _a = pattern.split(';'), zeroPattern = _a[0], negativePattern = _a[1];\n switch (sign) {\n case 0:\n return zeroPattern;\n case -1:\n return negativePattern;\n default:\n return negativePattern.indexOf('-') >= 0\n ? negativePattern.replace(/-/g, '+')\n : \"+\".concat(zeroPattern);\n }\n}\n// Find the CLDR pattern for compact notation based on the magnitude of data and style.\n//\n// Example return value: \"¤ {c:laki}000;¤{c:laki} -0\" (`sw` locale):\n// - Notice the `{c:...}` token that wraps the compact literal.\n// - The consecutive zeros are normalized to single zero to match CLDR_NUMBER_PATTERN.\n//\n// Returning null means the compact display pattern cannot be found.\nfunction getCompactDisplayPattern(numberResult, pl, data, style, compactDisplay, currencyDisplay, numberingSystem) {\n var _a;\n var roundedNumber = numberResult.roundedNumber, sign = numberResult.sign, magnitude = numberResult.magnitude;\n var magnitudeKey = String(Math.pow(10, magnitude));\n var defaultNumberingSystem = data.numbers.nu[0];\n var pattern;\n if (style === 'currency' && currencyDisplay !== 'name') {\n var byNumberingSystem = data.numbers.currency;\n var currencyData = byNumberingSystem[numberingSystem] ||\n byNumberingSystem[defaultNumberingSystem];\n // NOTE: compact notation ignores currencySign!\n var compactPluralRules = (_a = currencyData.short) === null || _a === void 0 ? void 0 : _a[magnitudeKey];\n if (!compactPluralRules) {\n return null;\n }\n pattern = selectPlural(pl, roundedNumber, compactPluralRules);\n }\n else {\n var byNumberingSystem = data.numbers.decimal;\n var byCompactDisplay = byNumberingSystem[numberingSystem] ||\n byNumberingSystem[defaultNumberingSystem];\n var compactPlaralRule = byCompactDisplay[compactDisplay][magnitudeKey];\n if (!compactPlaralRule) {\n return null;\n }\n pattern = selectPlural(pl, roundedNumber, compactPlaralRule);\n }\n // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats\n // > If the value is precisely “0”, either explicit or defaulted, then the normal number format\n // > pattern for that sort of object is supplied.\n if (pattern === '0') {\n return null;\n }\n pattern = getPatternForSign(pattern, sign)\n // Extract compact literal from the pattern\n .replace(/([^\\s;\\-\\+\\d¤]+)/g, '{c:$1}')\n // We replace one or more zeros with a single zero so it matches `CLDR_NUMBER_PATTERN`.\n .replace(/0+/, '0');\n return pattern;\n}\nfunction selectPlural(pl, x, rules) {\n return rules[pl.select(x)] || rules.other;\n}\n","import { FormatNumericToString } from './FormatNumericToString';\nimport { SameValue } from '../262';\nimport { ComputeExponent } from './ComputeExponent';\nimport formatToParts from './format_to_parts';\n/**\n * https://tc39.es/ecma402/#sec-formatnumberstring\n */\nexport function PartitionNumberPattern(numberFormat, x, _a) {\n var _b;\n var getInternalSlots = _a.getInternalSlots;\n var internalSlots = getInternalSlots(numberFormat);\n var pl = internalSlots.pl, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;\n var symbols = dataLocaleData.numbers.symbols[numberingSystem] ||\n dataLocaleData.numbers.symbols[dataLocaleData.numbers.nu[0]];\n var magnitude = 0;\n var exponent = 0;\n var n;\n if (isNaN(x)) {\n n = symbols.nan;\n }\n else if (x == Number.POSITIVE_INFINITY || x == Number.NEGATIVE_INFINITY) {\n n = symbols.infinity;\n }\n else {\n if (!SameValue(x, -0)) {\n if (!isFinite(x)) {\n throw new Error('Input must be a mathematical value');\n }\n if (internalSlots.style == 'percent') {\n x *= 100;\n }\n ;\n _b = ComputeExponent(numberFormat, x, {\n getInternalSlots: getInternalSlots,\n }), exponent = _b[0], magnitude = _b[1];\n // Preserve more precision by doing multiplication when exponent is negative.\n x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent);\n }\n var formatNumberResult = FormatNumericToString(internalSlots, x);\n n = formatNumberResult.formattedString;\n x = formatNumberResult.roundedNumber;\n }\n // Based on https://tc39.es/ecma402/#sec-getnumberformatpattern\n // We need to do this before `x` is rounded.\n var sign;\n var signDisplay = internalSlots.signDisplay;\n switch (signDisplay) {\n case 'never':\n sign = 0;\n break;\n case 'auto':\n if (SameValue(x, 0) || x > 0 || isNaN(x)) {\n sign = 0;\n }\n else {\n sign = -1;\n }\n break;\n case 'always':\n if (SameValue(x, 0) || x > 0 || isNaN(x)) {\n sign = 1;\n }\n else {\n sign = -1;\n }\n break;\n default:\n // x === 0 -> x is 0 or x is -0\n if (x === 0 || isNaN(x)) {\n sign = 0;\n }\n else if (x > 0) {\n sign = 1;\n }\n else {\n sign = -1;\n }\n }\n return formatToParts({ roundedNumber: x, formattedString: n, exponent: exponent, magnitude: magnitude, sign: sign }, internalSlots.dataLocaleData, pl, internalSlots);\n}\n","import { PartitionNumberPattern } from './PartitionNumberPattern';\nimport { CollapseNumberRange } from './CollapseNumberRange';\nimport { FormatApproximately } from './FormatApproximately';\n/**\n * https://tc39.es/ecma402/#sec-partitionnumberrangepattern\n */\nexport function PartitionNumberRangePattern(numberFormat, x, y, _a) {\n var getInternalSlots = _a.getInternalSlots;\n if (isNaN(x) || isNaN(y)) {\n throw new RangeError('Input must be a number');\n }\n var result = [];\n var xResult = PartitionNumberPattern(numberFormat, x, { getInternalSlots: getInternalSlots });\n var yResult = PartitionNumberPattern(numberFormat, y, { getInternalSlots: getInternalSlots });\n if (xResult === yResult) {\n return FormatApproximately(numberFormat, xResult, { getInternalSlots: getInternalSlots });\n }\n for (var _i = 0, xResult_1 = xResult; _i < xResult_1.length; _i++) {\n var r = xResult_1[_i];\n r.source = 'startRange';\n }\n result = result.concat(xResult);\n var internalSlots = getInternalSlots(numberFormat);\n var symbols = internalSlots.dataLocaleData.numbers.symbols[internalSlots.numberingSystem];\n result.push({ type: 'literal', value: symbols.rangeSign, source: 'shared' });\n for (var _b = 0, yResult_1 = yResult; _b < yResult_1.length; _b++) {\n var r = yResult_1[_b];\n r.source = 'endRange';\n }\n result = result.concat(yResult);\n return CollapseNumberRange(result);\n}\n","import { PartitionNumberRangePattern } from './PartitionNumberRangePattern';\n/**\n * https://tc39.es/ecma402/#sec-formatnumericrange\n */\nexport function FormatNumericRange(numberFormat, x, y, _a) {\n var getInternalSlots = _a.getInternalSlots;\n var parts = PartitionNumberRangePattern(numberFormat, x, y, {\n getInternalSlots: getInternalSlots,\n });\n return parts.map(function (part) { return part.value; }).join('');\n}\n","import { PartitionNumberRangePattern } from './PartitionNumberRangePattern';\n/**\n * https://tc39.es/ecma402/#sec-formatnumericrangetoparts\n */\nexport function FormatNumericRangeToParts(numberFormat, x, y, _a) {\n var getInternalSlots = _a.getInternalSlots;\n var parts = PartitionNumberRangePattern(numberFormat, x, y, {\n getInternalSlots: getInternalSlots,\n });\n return parts.map(function (part, index) { return ({\n type: part.type,\n value: part.value,\n source: part.source,\n result: index.toString(),\n }); });\n}\n","import { PartitionNumberPattern } from './PartitionNumberPattern';\nimport { ArrayCreate } from '../262';\nexport function FormatNumericToParts(nf, x, implDetails) {\n var parts = PartitionNumberPattern(nf, x, implDetails);\n var result = ArrayCreate(0);\n for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\n var part = parts_1[_i];\n result.push({\n type: part.type,\n value: part.value,\n });\n }\n return result;\n}\n","var negativeMapping = {\n ceil: 'zero',\n floor: 'infinity',\n expand: 'infinity',\n trunc: 'zero',\n halfCeil: 'half-zero',\n halfFloor: 'half-infinity',\n halfExpand: 'half-infinity',\n halfTrunc: 'half-zero',\n halfEven: 'half-even',\n};\nvar positiveMapping = {\n ceil: 'infinity',\n floor: 'zero',\n expand: 'infinity',\n trunc: 'zero',\n halfCeil: 'half-infinity',\n halfFloor: 'half-zero',\n halfExpand: 'half-infinity',\n halfTrunc: 'half-zero',\n halfEven: 'half-even',\n};\nexport function GetUnsignedRoundingMode(roundingMode, isNegative) {\n if (isNegative) {\n return negativeMapping[roundingMode];\n }\n return positiveMapping[roundingMode];\n}\n","import { DefaultNumberOption } from '../DefaultNumberOption';\nimport { GetNumberOption } from '../GetNumberOption';\nimport { GetOption } from '../GetOption';\n/**\n * https://tc39.es/ecma402/#sec-setnfdigitoptions\n */\nexport function SetNumberFormatDigitOptions(internalSlots, opts, mnfdDefault, mxfdDefault, notation) {\n var mnid = GetNumberOption(opts, 'minimumIntegerDigits', 1, 21, 1);\n var mnfd = opts.minimumFractionDigits;\n var mxfd = opts.maximumFractionDigits;\n var mnsd = opts.minimumSignificantDigits;\n var mxsd = opts.maximumSignificantDigits;\n internalSlots.minimumIntegerDigits = mnid;\n var roundingPriority = GetOption(opts, 'roundingPriority', 'string', ['auto', 'morePrecision', 'lessPrecision'], 'auto');\n var hasSd = mnsd !== undefined || mxsd !== undefined;\n var hasFd = mnfd !== undefined || mxfd !== undefined;\n var needSd = true;\n var needFd = true;\n if (roundingPriority === 'auto') {\n needSd = hasSd;\n if (hasSd || (!hasFd && notation === 'compact')) {\n needFd = false;\n }\n }\n if (needSd) {\n if (hasSd) {\n mnsd = DefaultNumberOption(mnsd, 1, 21, 1);\n mxsd = DefaultNumberOption(mxsd, mnsd, 21, 21);\n internalSlots.minimumSignificantDigits = mnsd;\n internalSlots.maximumSignificantDigits = mxsd;\n }\n else {\n internalSlots.minimumSignificantDigits = 1;\n internalSlots.maximumSignificantDigits = 21;\n }\n }\n if (needFd) {\n if (hasFd) {\n mnfd = DefaultNumberOption(mnfd, 0, 20, undefined);\n mxfd = DefaultNumberOption(mxfd, 0, 20, undefined);\n if (mnfd === undefined) {\n // @ts-expect-error\n mnfd = Math.min(mnfdDefault, mxfd);\n }\n else if (mxfd === undefined) {\n mxfd = Math.max(mxfdDefault, mnfd);\n }\n else if (mnfd > mxfd) {\n throw new RangeError(\"Invalid range, \".concat(mnfd, \" > \").concat(mxfd));\n }\n internalSlots.minimumFractionDigits = mnfd;\n internalSlots.maximumFractionDigits = mxfd;\n }\n else {\n internalSlots.minimumFractionDigits = mnfdDefault;\n internalSlots.maximumFractionDigits = mxfdDefault;\n }\n }\n if (needSd || needFd) {\n if (roundingPriority === 'morePrecision') {\n internalSlots.roundingType = 'morePrecision';\n }\n else if (roundingPriority === 'lessPrecision') {\n internalSlots.roundingType = 'lessPrecision';\n }\n else if (hasSd) {\n internalSlots.roundingType = 'significantDigits';\n }\n else {\n internalSlots.roundingType = 'fractionDigits';\n }\n }\n else {\n internalSlots.roundingType = 'morePrecision';\n internalSlots.minimumFractionDigits = 0;\n internalSlots.maximumFractionDigits = 0;\n internalSlots.minimumSignificantDigits = 1;\n internalSlots.maximumSignificantDigits = 2;\n }\n}\n","import { GetOption } from '../GetOption';\nimport { IsWellFormedCurrencyCode } from '../IsWellFormedCurrencyCode';\nimport { IsWellFormedUnitIdentifier } from '../IsWellFormedUnitIdentifier';\n/**\n * https://tc39.es/ecma402/#sec-setnumberformatunitoptions\n */\nexport function SetNumberFormatUnitOptions(nf, options, _a) {\n if (options === void 0) { options = Object.create(null); }\n var getInternalSlots = _a.getInternalSlots;\n var internalSlots = getInternalSlots(nf);\n var style = GetOption(options, 'style', 'string', ['decimal', 'percent', 'currency', 'unit'], 'decimal');\n internalSlots.style = style;\n var currency = GetOption(options, 'currency', 'string', undefined, undefined);\n if (currency !== undefined && !IsWellFormedCurrencyCode(currency)) {\n throw RangeError('Malformed currency code');\n }\n if (style === 'currency' && currency === undefined) {\n throw TypeError('currency cannot be undefined');\n }\n var currencyDisplay = GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'narrowSymbol', 'name'], 'symbol');\n var currencySign = GetOption(options, 'currencySign', 'string', ['standard', 'accounting'], 'standard');\n var unit = GetOption(options, 'unit', 'string', undefined, undefined);\n if (unit !== undefined && !IsWellFormedUnitIdentifier(unit)) {\n throw RangeError('Invalid unit argument for Intl.NumberFormat()');\n }\n if (style === 'unit' && unit === undefined) {\n throw TypeError('unit cannot be undefined');\n }\n var unitDisplay = GetOption(options, 'unitDisplay', 'string', ['short', 'narrow', 'long'], 'short');\n if (style === 'currency') {\n internalSlots.currency = currency.toUpperCase();\n internalSlots.currencyDisplay = currencyDisplay;\n internalSlots.currencySign = currencySign;\n }\n if (style === 'unit') {\n internalSlots.unit = unit;\n internalSlots.unitDisplay = unitDisplay;\n }\n}\n","import { ResolveLocale } from '@formatjs/intl-localematcher';\nimport { CanonicalizeLocaleList } from '../CanonicalizeLocaleList';\nimport { CoerceOptionsToObject } from '../CoerceOptionsToObject';\nimport { GetNumberOption } from '../GetNumberOption';\nimport { GetOption } from '../GetOption';\nimport { GetStringOrBooleanOption } from '../GetStringOrBooleanOption';\nimport { invariant } from '../utils';\nimport { CurrencyDigits } from './CurrencyDigits';\nimport { SetNumberFormatDigitOptions } from './SetNumberFormatDigitOptions';\nimport { SetNumberFormatUnitOptions } from './SetNumberFormatUnitOptions';\nvar VALID_ROUND_INCREMENT_VALUES = [\n 1, 2, 5, 10, 20, 25, 50, 100, 200, 250, 500, 1000, 2000,\n];\n/**\n * https://tc39.es/ecma402/#sec-initializenumberformat\n */\nexport function InitializeNumberFormat(nf, locales, opts, _a) {\n var getInternalSlots = _a.getInternalSlots, localeData = _a.localeData, availableLocales = _a.availableLocales, numberingSystemNames = _a.numberingSystemNames, getDefaultLocale = _a.getDefaultLocale, currencyDigitsData = _a.currencyDigitsData;\n // @ts-ignore\n var requestedLocales = CanonicalizeLocaleList(locales);\n var options = CoerceOptionsToObject(opts);\n var opt = Object.create(null);\n var matcher = GetOption(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');\n opt.localeMatcher = matcher;\n var numberingSystem = GetOption(options, 'numberingSystem', 'string', undefined, undefined);\n if (numberingSystem !== undefined &&\n numberingSystemNames.indexOf(numberingSystem) < 0) {\n // 8.a. If numberingSystem does not match the Unicode Locale Identifier type nonterminal,\n // throw a RangeError exception.\n throw RangeError(\"Invalid numberingSystems: \".concat(numberingSystem));\n }\n opt.nu = numberingSystem;\n var r = ResolveLocale(Array.from(availableLocales), requestedLocales, opt, \n // [[RelevantExtensionKeys]] slot, which is a constant\n ['nu'], localeData, getDefaultLocale);\n var dataLocaleData = localeData[r.dataLocale];\n invariant(!!dataLocaleData, \"Missing locale data for \".concat(r.dataLocale));\n var internalSlots = getInternalSlots(nf);\n internalSlots.locale = r.locale;\n internalSlots.dataLocale = r.dataLocale;\n internalSlots.numberingSystem = r.nu;\n internalSlots.dataLocaleData = dataLocaleData;\n SetNumberFormatUnitOptions(nf, options, { getInternalSlots: getInternalSlots });\n var style = internalSlots.style;\n var mnfdDefault;\n var mxfdDefault;\n if (style === 'currency') {\n var currency = internalSlots.currency;\n var cDigits = CurrencyDigits(currency, { currencyDigitsData: currencyDigitsData });\n mnfdDefault = cDigits;\n mxfdDefault = cDigits;\n }\n else {\n mnfdDefault = 0;\n mxfdDefault = style === 'percent' ? 0 : 3;\n }\n var notation = GetOption(options, 'notation', 'string', ['standard', 'scientific', 'engineering', 'compact'], 'standard');\n internalSlots.notation = notation;\n SetNumberFormatDigitOptions(internalSlots, options, mnfdDefault, mxfdDefault, notation);\n var roundingIncrement = GetNumberOption(options, 'roundingIncrement', 1, 5000, 1);\n if (VALID_ROUND_INCREMENT_VALUES.indexOf(roundingIncrement) === -1) {\n throw new RangeError(\"Invalid rounding increment value: \".concat(roundingIncrement, \".\\nValid values are \").concat(VALID_ROUND_INCREMENT_VALUES, \".\"));\n }\n if (roundingIncrement !== 1 &&\n internalSlots.roundingType !== 'fractionDigits') {\n throw new TypeError(\"For roundingIncrement > 1 only fractionDigits is a valid roundingType\");\n }\n if (roundingIncrement !== 1 &&\n internalSlots.maximumFractionDigits !== internalSlots.minimumFractionDigits) {\n throw new RangeError('With roundingIncrement > 1, maximumFractionDigits and minimumFractionDigits must be equal.');\n }\n internalSlots.roundingIncrement = roundingIncrement;\n var trailingZeroDisplay = GetOption(options, 'trailingZeroDisplay', 'string', ['auto', 'stripIfInteger'], 'auto');\n internalSlots.trailingZeroDisplay = trailingZeroDisplay;\n var compactDisplay = GetOption(options, 'compactDisplay', 'string', ['short', 'long'], 'short');\n var defaultUseGrouping = 'auto';\n if (notation === 'compact') {\n internalSlots.compactDisplay = compactDisplay;\n defaultUseGrouping = 'min2';\n }\n internalSlots.useGrouping = GetStringOrBooleanOption(options, 'useGrouping', ['min2', 'auto', 'always'], 'always', false, defaultUseGrouping);\n internalSlots.signDisplay = GetOption(options, 'signDisplay', 'string', ['auto', 'never', 'always', 'exceptZero', 'negative'], 'auto');\n internalSlots.roundingMode = GetOption(options, 'roundingMode', 'string', [\n 'ceil',\n 'floor',\n 'expand',\n 'trunc',\n 'halfCeil',\n 'halfFloor',\n 'halfExpand',\n 'halfTrunc',\n 'halfEven',\n ], 'halfExpand');\n return nf;\n}\n","import { invariant } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-partitionpattern\n * @param pattern\n */\nexport function PartitionPattern(pattern) {\n var result = [];\n var beginIndex = pattern.indexOf('{');\n var endIndex = 0;\n var nextIndex = 0;\n var length = pattern.length;\n while (beginIndex < pattern.length && beginIndex > -1) {\n endIndex = pattern.indexOf('}', beginIndex);\n invariant(endIndex > beginIndex, \"Invalid pattern \".concat(pattern));\n if (beginIndex > nextIndex) {\n result.push({\n type: 'literal',\n value: pattern.substring(nextIndex, beginIndex),\n });\n }\n result.push({\n type: pattern.substring(beginIndex + 1, endIndex),\n value: undefined,\n });\n nextIndex = endIndex + 1;\n beginIndex = pattern.indexOf('{', nextIndex);\n }\n if (nextIndex < length) {\n result.push({\n type: 'literal',\n value: pattern.substring(nextIndex, length),\n });\n }\n return result;\n}\n","import { LookupSupportedLocales } from '@formatjs/intl-localematcher';\nimport { ToObject } from './262';\nimport { GetOption } from './GetOption';\n/**\n * https://tc39.es/ecma402/#sec-supportedlocales\n * @param availableLocales\n * @param requestedLocales\n * @param options\n */\nexport function SupportedLocales(availableLocales, requestedLocales, options) {\n var matcher = 'best fit';\n if (options !== undefined) {\n options = ToObject(options);\n matcher = GetOption(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');\n }\n if (matcher === 'best fit') {\n return LookupSupportedLocales(Array.from(availableLocales), requestedLocales);\n }\n return LookupSupportedLocales(Array.from(availableLocales), requestedLocales);\n}\n","export var RangePatternType;\n(function (RangePatternType) {\n RangePatternType[\"startRange\"] = \"startRange\";\n RangePatternType[\"shared\"] = \"shared\";\n RangePatternType[\"endRange\"] = \"endRange\";\n})(RangePatternType || (RangePatternType = {}));\n","import { __extends } from \"tslib\";\nvar MissingLocaleDataError = /** @class */ (function (_super) {\n __extends(MissingLocaleDataError, _super);\n function MissingLocaleDataError() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'MISSING_LOCALE_DATA';\n return _this;\n }\n return MissingLocaleDataError;\n}(Error));\nexport function isMissingLocaleDataError(e) {\n return e.type === 'MISSING_LOCALE_DATA';\n}\n","export var data = {\n supplemental: {\n languageMatching: {\n 'written-new': [\n {\n paradigmLocales: {\n _locales: 'en en_GB es es_419 pt_BR pt_PT',\n },\n },\n {\n $enUS: {\n _value: 'AS+CA+GU+MH+MP+PH+PR+UM+US+VI',\n },\n },\n {\n $cnsar: {\n _value: 'HK+MO',\n },\n },\n {\n $americas: {\n _value: '019',\n },\n },\n {\n $maghreb: {\n _value: 'MA+DZ+TN+LY+MR+EH',\n },\n },\n {\n no: {\n _desired: 'nb',\n _distance: '1',\n },\n },\n {\n bs: {\n _desired: 'hr',\n _distance: '4',\n },\n },\n {\n bs: {\n _desired: 'sh',\n _distance: '4',\n },\n },\n {\n hr: {\n _desired: 'sh',\n _distance: '4',\n },\n },\n {\n sr: {\n _desired: 'sh',\n _distance: '4',\n },\n },\n {\n aa: {\n _desired: 'ssy',\n _distance: '4',\n },\n },\n {\n de: {\n _desired: 'gsw',\n _distance: '4',\n _oneway: 'true',\n },\n },\n {\n de: {\n _desired: 'lb',\n _distance: '4',\n _oneway: 'true',\n },\n },\n {\n no: {\n _desired: 'da',\n _distance: '8',\n },\n },\n {\n nb: {\n _desired: 'da',\n _distance: '8',\n },\n },\n {\n ru: {\n _desired: 'ab',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ach',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n nl: {\n _desired: 'af',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ak',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'am',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'ay',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'az',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ur: {\n _desired: 'bal',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'be',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'bem',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'bh',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'bn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'bo',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'br',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'ca',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n fil: {\n _desired: 'ceb',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'chr',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ckb',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'co',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'crs',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n sk: {\n _desired: 'cs',\n _distance: '20',\n },\n },\n {\n en: {\n _desired: 'cy',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ee',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'eo',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'eu',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n da: {\n _desired: 'fo',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n nl: {\n _desired: 'fy',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ga',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'gaa',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'gd',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'gl',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'gn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'gu',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ha',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'haw',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'ht',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'hy',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ia',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ig',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'is',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n id: {\n _desired: 'jv',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ka',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'kg',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'kk',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'km',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'kn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'kri',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n tr: {\n _desired: 'ku',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'ky',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n it: {\n _desired: 'la',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'lg',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'ln',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'lo',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'loz',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'lua',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'mai',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'mfe',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'mg',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'mi',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ml',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'mn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'mr',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n id: {\n _desired: 'ms',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'mt',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'my',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ne',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n nb: {\n _desired: 'nn',\n _distance: '20',\n },\n },\n {\n no: {\n _desired: 'nn',\n _distance: '20',\n },\n },\n {\n en: {\n _desired: 'nso',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ny',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'nyn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'oc',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'om',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'or',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'pa',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'pcm',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ps',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n es: {\n _desired: 'qu',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n de: {\n _desired: 'rm',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'rn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'rw',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n hi: {\n _desired: 'sa',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'sd',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'si',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'sn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'so',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'sq',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'st',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n id: {\n _desired: 'su',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'sw',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ta',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'te',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'tg',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ti',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'tk',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'tlh',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'tn',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'to',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'tt',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'tum',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'ug',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'uk',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'ur',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ru: {\n _desired: 'uz',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n fr: {\n _desired: 'wo',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'xh',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'yi',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'yo',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'za',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n en: {\n _desired: 'zu',\n _distance: '30',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'aao',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'abh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'abv',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acx',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'acy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'adf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'aeb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'aec',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'afb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ajp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'apc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'apd',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'arq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ars',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ary',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'arz',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'auz',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'avl',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ayh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ayl',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ayn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ayp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'bbz',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'pga',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'shu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ar: {\n _desired: 'ssh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n az: {\n _desired: 'azb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n et: {\n _desired: 'vro',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'ffm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fub',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fue',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fuf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fuh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fui',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fuq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ff: {\n _desired: 'fuv',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n gn: {\n _desired: 'gnw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n gn: {\n _desired: 'gui',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n gn: {\n _desired: 'gun',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n gn: {\n _desired: 'nhd',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n iu: {\n _desired: 'ikt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'enb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'eyo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'niq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'oki',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'pko',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'sgc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'tec',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kln: {\n _desired: 'tuy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kok: {\n _desired: 'gom',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n kpe: {\n _desired: 'gkp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'ida',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lkb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lko',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lks',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lri',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lrm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lsm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lto',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lts',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'lwg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'nle',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'nyd',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n luy: {\n _desired: 'rag',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n lv: {\n _desired: 'ltg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'bhr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'bjq',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'bmm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'bzc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'msh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'skg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'tdx',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'tkg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'txy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'xmv',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mg: {\n _desired: 'xmw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n mn: {\n _desired: 'mvf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'bjn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'btj',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'bve',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'bvu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'coa',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'dup',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'hji',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'id',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'jak',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'jax',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'kvb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'kvr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'kxd',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'lce',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'lcf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'liw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'max',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'meo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'mfa',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'mfb',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'min',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'mqg',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'msi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'mui',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'orn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'ors',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'pel',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'pse',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'tmw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'urk',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'vkk',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'vkt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'xmm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'zlm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ms: {\n _desired: 'zmi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ne: {\n _desired: 'dty',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n om: {\n _desired: 'gax',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n om: {\n _desired: 'hae',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n om: {\n _desired: 'orc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n or: {\n _desired: 'spv',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ps: {\n _desired: 'pbt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n ps: {\n _desired: 'pst',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qub',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qud',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quf',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qug',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quk',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qul',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qup',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qur',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qus',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qux',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'quy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qva',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qve',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvj',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvl',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvm',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvs',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qvz',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qwa',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qwc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qwh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qws',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxa',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxl',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n qu: {\n _desired: 'qxw',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sc: {\n _desired: 'sdc',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sc: {\n _desired: 'sdn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sc: {\n _desired: 'sro',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sq: {\n _desired: 'aae',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sq: {\n _desired: 'aat',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n sq: {\n _desired: 'aln',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n syr: {\n _desired: 'aii',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n uz: {\n _desired: 'uzs',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n yi: {\n _desired: 'yih',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'cdo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'cjy',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'cpx',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'czh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'czo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'gan',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'hak',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'hsn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'lzh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'mnp',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'nan',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'wuu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n zh: {\n _desired: 'yue',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n '*': {\n _desired: '*',\n _distance: '80',\n },\n },\n {\n 'en-Latn': {\n _desired: 'am-Ethi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'ru-Cyrl': {\n _desired: 'az-Latn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'bn-Beng',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'zh-Hans': {\n _desired: 'bo-Tibt',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'ru-Cyrl': {\n _desired: 'hy-Armn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ka-Geor',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'km-Khmr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'kn-Knda',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'lo-Laoo',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ml-Mlym',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'my-Mymr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ne-Deva',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'or-Orya',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'pa-Guru',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ps-Arab',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'sd-Arab',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'si-Sinh',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ta-Taml',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'te-Telu',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ti-Ethi',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'ru-Cyrl': {\n _desired: 'tk-Latn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'ur-Arab',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'ru-Cyrl': {\n _desired: 'uz-Latn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'en-Latn': {\n _desired: 'yi-Hebr',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'sr-Cyrl': {\n _desired: 'sr-Latn',\n _distance: '5',\n },\n },\n {\n 'zh-Hans': {\n _desired: 'za-Latn',\n _distance: '10',\n _oneway: 'true',\n },\n },\n {\n 'zh-Hans': {\n _desired: 'zh-Hani',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'zh-Hant': {\n _desired: 'zh-Hani',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'ar-Arab': {\n _desired: 'ar-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'bn-Beng': {\n _desired: 'bn-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'gu-Gujr': {\n _desired: 'gu-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'hi-Deva': {\n _desired: 'hi-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'kn-Knda': {\n _desired: 'kn-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'ml-Mlym': {\n _desired: 'ml-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'mr-Deva': {\n _desired: 'mr-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'ta-Taml': {\n _desired: 'ta-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'te-Telu': {\n _desired: 'te-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'zh-Hans': {\n _desired: 'zh-Latn',\n _distance: '20',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Latn',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Hani',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Hira',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Kana',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Jpan': {\n _desired: 'ja-Hrkt',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Hrkt': {\n _desired: 'ja-Hira',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ja-Hrkt': {\n _desired: 'ja-Kana',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ko-Kore': {\n _desired: 'ko-Hani',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ko-Kore': {\n _desired: 'ko-Hang',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ko-Kore': {\n _desired: 'ko-Jamo',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n 'ko-Hang': {\n _desired: 'ko-Jamo',\n _distance: '5',\n _oneway: 'true',\n },\n },\n {\n '*-*': {\n _desired: '*-*',\n _distance: '50',\n },\n },\n {\n 'ar-*-$maghreb': {\n _desired: 'ar-*-$maghreb',\n _distance: '4',\n },\n },\n {\n 'ar-*-$!maghreb': {\n _desired: 'ar-*-$!maghreb',\n _distance: '4',\n },\n },\n {\n 'ar-*-*': {\n _desired: 'ar-*-*',\n _distance: '5',\n },\n },\n {\n 'en-*-$enUS': {\n _desired: 'en-*-$enUS',\n _distance: '4',\n },\n },\n {\n 'en-*-GB': {\n _desired: 'en-*-$!enUS',\n _distance: '3',\n },\n },\n {\n 'en-*-$!enUS': {\n _desired: 'en-*-$!enUS',\n _distance: '4',\n },\n },\n {\n 'en-*-*': {\n _desired: 'en-*-*',\n _distance: '5',\n },\n },\n {\n 'es-*-$americas': {\n _desired: 'es-*-$americas',\n _distance: '4',\n },\n },\n {\n 'es-*-$!americas': {\n _desired: 'es-*-$!americas',\n _distance: '4',\n },\n },\n {\n 'es-*-*': {\n _desired: 'es-*-*',\n _distance: '5',\n },\n },\n {\n 'pt-*-$americas': {\n _desired: 'pt-*-$americas',\n _distance: '4',\n },\n },\n {\n 'pt-*-$!americas': {\n _desired: 'pt-*-$!americas',\n _distance: '4',\n },\n },\n {\n 'pt-*-*': {\n _desired: 'pt-*-*',\n _distance: '5',\n },\n },\n {\n 'zh-Hant-$cnsar': {\n _desired: 'zh-Hant-$cnsar',\n _distance: '4',\n },\n },\n {\n 'zh-Hant-$!cnsar': {\n _desired: 'zh-Hant-$!cnsar',\n _distance: '4',\n },\n },\n {\n 'zh-Hant-*': {\n _desired: 'zh-Hant-*',\n _distance: '5',\n },\n },\n {\n '*-*-*': {\n _desired: '*-*-*',\n _distance: '4',\n },\n },\n ],\n },\n },\n};\n","// This file is generated from regions-gen.ts\nexport var regions = {\n \"001\": [\n \"001\",\n \"001-status-grouping\",\n \"002\",\n \"005\",\n \"009\",\n \"011\",\n \"013\",\n \"014\",\n \"015\",\n \"017\",\n \"018\",\n \"019\",\n \"021\",\n \"029\",\n \"030\",\n \"034\",\n \"035\",\n \"039\",\n \"053\",\n \"054\",\n \"057\",\n \"061\",\n \"142\",\n \"143\",\n \"145\",\n \"150\",\n \"151\",\n \"154\",\n \"155\",\n \"AC\",\n \"AD\",\n \"AE\",\n \"AF\",\n \"AG\",\n \"AI\",\n \"AL\",\n \"AM\",\n \"AO\",\n \"AQ\",\n \"AR\",\n \"AS\",\n \"AT\",\n \"AU\",\n \"AW\",\n \"AX\",\n \"AZ\",\n \"BA\",\n \"BB\",\n \"BD\",\n \"BE\",\n \"BF\",\n \"BG\",\n \"BH\",\n \"BI\",\n \"BJ\",\n \"BL\",\n \"BM\",\n \"BN\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BT\",\n \"BV\",\n \"BW\",\n \"BY\",\n \"BZ\",\n \"CA\",\n \"CC\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CH\",\n \"CI\",\n \"CK\",\n \"CL\",\n \"CM\",\n \"CN\",\n \"CO\",\n \"CP\",\n \"CQ\",\n \"CR\",\n \"CU\",\n \"CV\",\n \"CW\",\n \"CX\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DG\",\n \"DJ\",\n \"DK\",\n \"DM\",\n \"DO\",\n \"DZ\",\n \"EA\",\n \"EC\",\n \"EE\",\n \"EG\",\n \"EH\",\n \"ER\",\n \"ES\",\n \"ET\",\n \"EU\",\n \"EZ\",\n \"FI\",\n \"FJ\",\n \"FK\",\n \"FM\",\n \"FO\",\n \"FR\",\n \"GA\",\n \"GB\",\n \"GD\",\n \"GE\",\n \"GF\",\n \"GG\",\n \"GH\",\n \"GI\",\n \"GL\",\n \"GM\",\n \"GN\",\n \"GP\",\n \"GQ\",\n \"GR\",\n \"GS\",\n \"GT\",\n \"GU\",\n \"GW\",\n \"GY\",\n \"HK\",\n \"HM\",\n \"HN\",\n \"HR\",\n \"HT\",\n \"HU\",\n \"IC\",\n \"ID\",\n \"IE\",\n \"IL\",\n \"IM\",\n \"IN\",\n \"IO\",\n \"IQ\",\n \"IR\",\n \"IS\",\n \"IT\",\n \"JE\",\n \"JM\",\n \"JO\",\n \"JP\",\n \"KE\",\n \"KG\",\n \"KH\",\n \"KI\",\n \"KM\",\n \"KN\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KY\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LC\",\n \"LI\",\n \"LK\",\n \"LR\",\n \"LS\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"LY\",\n \"MA\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MF\",\n \"MG\",\n \"MH\",\n \"MK\",\n \"ML\",\n \"MM\",\n \"MN\",\n \"MO\",\n \"MP\",\n \"MQ\",\n \"MR\",\n \"MS\",\n \"MT\",\n \"MU\",\n \"MV\",\n \"MW\",\n \"MX\",\n \"MY\",\n \"MZ\",\n \"NA\",\n \"NC\",\n \"NE\",\n \"NF\",\n \"NG\",\n \"NI\",\n \"NL\",\n \"NO\",\n \"NP\",\n \"NR\",\n \"NU\",\n \"NZ\",\n \"OM\",\n \"PA\",\n \"PE\",\n \"PF\",\n \"PG\",\n \"PH\",\n \"PK\",\n \"PL\",\n \"PM\",\n \"PN\",\n \"PR\",\n \"PS\",\n \"PT\",\n \"PW\",\n \"PY\",\n \"QA\",\n \"QO\",\n \"RE\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"RW\",\n \"SA\",\n \"SB\",\n \"SC\",\n \"SD\",\n \"SE\",\n \"SG\",\n \"SH\",\n \"SI\",\n \"SJ\",\n \"SK\",\n \"SL\",\n \"SM\",\n \"SN\",\n \"SO\",\n \"SR\",\n \"SS\",\n \"ST\",\n \"SV\",\n \"SX\",\n \"SY\",\n \"SZ\",\n \"TA\",\n \"TC\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TH\",\n \"TJ\",\n \"TK\",\n \"TL\",\n \"TM\",\n \"TN\",\n \"TO\",\n \"TR\",\n \"TT\",\n \"TV\",\n \"TW\",\n \"TZ\",\n \"UA\",\n \"UG\",\n \"UM\",\n \"UN\",\n \"US\",\n \"UY\",\n \"UZ\",\n \"VA\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\",\n \"VN\",\n \"VU\",\n \"WF\",\n \"WS\",\n \"XK\",\n \"YE\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ],\n \"002\": [\n \"002\",\n \"002-status-grouping\",\n \"011\",\n \"014\",\n \"015\",\n \"017\",\n \"018\",\n \"202\",\n \"AO\",\n \"BF\",\n \"BI\",\n \"BJ\",\n \"BW\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CI\",\n \"CM\",\n \"CV\",\n \"DJ\",\n \"DZ\",\n \"EA\",\n \"EG\",\n \"EH\",\n \"ER\",\n \"ET\",\n \"GA\",\n \"GH\",\n \"GM\",\n \"GN\",\n \"GQ\",\n \"GW\",\n \"IC\",\n \"IO\",\n \"KE\",\n \"KM\",\n \"LR\",\n \"LS\",\n \"LY\",\n \"MA\",\n \"MG\",\n \"ML\",\n \"MR\",\n \"MU\",\n \"MW\",\n \"MZ\",\n \"NA\",\n \"NE\",\n \"NG\",\n \"RE\",\n \"RW\",\n \"SC\",\n \"SD\",\n \"SH\",\n \"SL\",\n \"SN\",\n \"SO\",\n \"SS\",\n \"ST\",\n \"SZ\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TN\",\n \"TZ\",\n \"UG\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ],\n \"003\": [\n \"003\",\n \"013\",\n \"021\",\n \"029\",\n \"AG\",\n \"AI\",\n \"AW\",\n \"BB\",\n \"BL\",\n \"BM\",\n \"BQ\",\n \"BS\",\n \"BZ\",\n \"CA\",\n \"CR\",\n \"CU\",\n \"CW\",\n \"DM\",\n \"DO\",\n \"GD\",\n \"GL\",\n \"GP\",\n \"GT\",\n \"HN\",\n \"HT\",\n \"JM\",\n \"KN\",\n \"KY\",\n \"LC\",\n \"MF\",\n \"MQ\",\n \"MS\",\n \"MX\",\n \"NI\",\n \"PA\",\n \"PM\",\n \"PR\",\n \"SV\",\n \"SX\",\n \"TC\",\n \"TT\",\n \"US\",\n \"VC\",\n \"VG\",\n \"VI\"\n ],\n \"005\": [\n \"005\",\n \"AR\",\n \"BO\",\n \"BR\",\n \"BV\",\n \"CL\",\n \"CO\",\n \"EC\",\n \"FK\",\n \"GF\",\n \"GS\",\n \"GY\",\n \"PE\",\n \"PY\",\n \"SR\",\n \"UY\",\n \"VE\"\n ],\n \"009\": [\n \"009\",\n \"053\",\n \"054\",\n \"057\",\n \"061\",\n \"AC\",\n \"AQ\",\n \"AS\",\n \"AU\",\n \"CC\",\n \"CK\",\n \"CP\",\n \"CX\",\n \"DG\",\n \"FJ\",\n \"FM\",\n \"GU\",\n \"HM\",\n \"KI\",\n \"MH\",\n \"MP\",\n \"NC\",\n \"NF\",\n \"NR\",\n \"NU\",\n \"NZ\",\n \"PF\",\n \"PG\",\n \"PN\",\n \"PW\",\n \"QO\",\n \"SB\",\n \"TA\",\n \"TK\",\n \"TO\",\n \"TV\",\n \"UM\",\n \"VU\",\n \"WF\",\n \"WS\"\n ],\n \"011\": [\n \"011\",\n \"BF\",\n \"BJ\",\n \"CI\",\n \"CV\",\n \"GH\",\n \"GM\",\n \"GN\",\n \"GW\",\n \"LR\",\n \"ML\",\n \"MR\",\n \"NE\",\n \"NG\",\n \"SH\",\n \"SL\",\n \"SN\",\n \"TG\"\n ],\n \"013\": [\n \"013\",\n \"BZ\",\n \"CR\",\n \"GT\",\n \"HN\",\n \"MX\",\n \"NI\",\n \"PA\",\n \"SV\"\n ],\n \"014\": [\n \"014\",\n \"BI\",\n \"DJ\",\n \"ER\",\n \"ET\",\n \"IO\",\n \"KE\",\n \"KM\",\n \"MG\",\n \"MU\",\n \"MW\",\n \"MZ\",\n \"RE\",\n \"RW\",\n \"SC\",\n \"SO\",\n \"SS\",\n \"TF\",\n \"TZ\",\n \"UG\",\n \"YT\",\n \"ZM\",\n \"ZW\"\n ],\n \"015\": [\n \"015\",\n \"DZ\",\n \"EA\",\n \"EG\",\n \"EH\",\n \"IC\",\n \"LY\",\n \"MA\",\n \"SD\",\n \"TN\"\n ],\n \"017\": [\n \"017\",\n \"AO\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CM\",\n \"GA\",\n \"GQ\",\n \"ST\",\n \"TD\"\n ],\n \"018\": [\n \"018\",\n \"BW\",\n \"LS\",\n \"NA\",\n \"SZ\",\n \"ZA\"\n ],\n \"019\": [\n \"003\",\n \"005\",\n \"013\",\n \"019\",\n \"019-status-grouping\",\n \"021\",\n \"029\",\n \"419\",\n \"AG\",\n \"AI\",\n \"AR\",\n \"AW\",\n \"BB\",\n \"BL\",\n \"BM\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BV\",\n \"BZ\",\n \"CA\",\n \"CL\",\n \"CO\",\n \"CR\",\n \"CU\",\n \"CW\",\n \"DM\",\n \"DO\",\n \"EC\",\n \"FK\",\n \"GD\",\n \"GF\",\n \"GL\",\n \"GP\",\n \"GS\",\n \"GT\",\n \"GY\",\n \"HN\",\n \"HT\",\n \"JM\",\n \"KN\",\n \"KY\",\n \"LC\",\n \"MF\",\n \"MQ\",\n \"MS\",\n \"MX\",\n \"NI\",\n \"PA\",\n \"PE\",\n \"PM\",\n \"PR\",\n \"PY\",\n \"SR\",\n \"SV\",\n \"SX\",\n \"TC\",\n \"TT\",\n \"US\",\n \"UY\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\"\n ],\n \"021\": [\n \"021\",\n \"BM\",\n \"CA\",\n \"GL\",\n \"PM\",\n \"US\"\n ],\n \"029\": [\n \"029\",\n \"AG\",\n \"AI\",\n \"AW\",\n \"BB\",\n \"BL\",\n \"BQ\",\n \"BS\",\n \"CU\",\n \"CW\",\n \"DM\",\n \"DO\",\n \"GD\",\n \"GP\",\n \"HT\",\n \"JM\",\n \"KN\",\n \"KY\",\n \"LC\",\n \"MF\",\n \"MQ\",\n \"MS\",\n \"PR\",\n \"SX\",\n \"TC\",\n \"TT\",\n \"VC\",\n \"VG\",\n \"VI\"\n ],\n \"030\": [\n \"030\",\n \"CN\",\n \"HK\",\n \"JP\",\n \"KP\",\n \"KR\",\n \"MN\",\n \"MO\",\n \"TW\"\n ],\n \"034\": [\n \"034\",\n \"AF\",\n \"BD\",\n \"BT\",\n \"IN\",\n \"IR\",\n \"LK\",\n \"MV\",\n \"NP\",\n \"PK\"\n ],\n \"035\": [\n \"035\",\n \"BN\",\n \"ID\",\n \"KH\",\n \"LA\",\n \"MM\",\n \"MY\",\n \"PH\",\n \"SG\",\n \"TH\",\n \"TL\",\n \"VN\"\n ],\n \"039\": [\n \"039\",\n \"AD\",\n \"AL\",\n \"BA\",\n \"ES\",\n \"GI\",\n \"GR\",\n \"HR\",\n \"IT\",\n \"ME\",\n \"MK\",\n \"MT\",\n \"PT\",\n \"RS\",\n \"SI\",\n \"SM\",\n \"VA\",\n \"XK\"\n ],\n \"053\": [\n \"053\",\n \"AU\",\n \"CC\",\n \"CX\",\n \"HM\",\n \"NF\",\n \"NZ\"\n ],\n \"054\": [\n \"054\",\n \"FJ\",\n \"NC\",\n \"PG\",\n \"SB\",\n \"VU\"\n ],\n \"057\": [\n \"057\",\n \"FM\",\n \"GU\",\n \"KI\",\n \"MH\",\n \"MP\",\n \"NR\",\n \"PW\",\n \"UM\"\n ],\n \"061\": [\n \"061\",\n \"AS\",\n \"CK\",\n \"NU\",\n \"PF\",\n \"PN\",\n \"TK\",\n \"TO\",\n \"TV\",\n \"WF\",\n \"WS\"\n ],\n \"142\": [\n \"030\",\n \"034\",\n \"035\",\n \"142\",\n \"143\",\n \"145\",\n \"AE\",\n \"AF\",\n \"AM\",\n \"AZ\",\n \"BD\",\n \"BH\",\n \"BN\",\n \"BT\",\n \"CN\",\n \"CY\",\n \"GE\",\n \"HK\",\n \"ID\",\n \"IL\",\n \"IN\",\n \"IQ\",\n \"IR\",\n \"JO\",\n \"JP\",\n \"KG\",\n \"KH\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LK\",\n \"MM\",\n \"MN\",\n \"MO\",\n \"MV\",\n \"MY\",\n \"NP\",\n \"OM\",\n \"PH\",\n \"PK\",\n \"PS\",\n \"QA\",\n \"SA\",\n \"SG\",\n \"SY\",\n \"TH\",\n \"TJ\",\n \"TL\",\n \"TM\",\n \"TR\",\n \"TW\",\n \"UZ\",\n \"VN\",\n \"YE\"\n ],\n \"143\": [\n \"143\",\n \"KG\",\n \"KZ\",\n \"TJ\",\n \"TM\",\n \"UZ\"\n ],\n \"145\": [\n \"145\",\n \"AE\",\n \"AM\",\n \"AZ\",\n \"BH\",\n \"CY\",\n \"GE\",\n \"IL\",\n \"IQ\",\n \"JO\",\n \"KW\",\n \"LB\",\n \"OM\",\n \"PS\",\n \"QA\",\n \"SA\",\n \"SY\",\n \"TR\",\n \"YE\"\n ],\n \"150\": [\n \"039\",\n \"150\",\n \"151\",\n \"154\",\n \"155\",\n \"AD\",\n \"AL\",\n \"AT\",\n \"AX\",\n \"BA\",\n \"BE\",\n \"BG\",\n \"BY\",\n \"CH\",\n \"CQ\",\n \"CZ\",\n \"DE\",\n \"DK\",\n \"EE\",\n \"ES\",\n \"FI\",\n \"FO\",\n \"FR\",\n \"GB\",\n \"GG\",\n \"GI\",\n \"GR\",\n \"HR\",\n \"HU\",\n \"IE\",\n \"IM\",\n \"IS\",\n \"IT\",\n \"JE\",\n \"LI\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MK\",\n \"MT\",\n \"NL\",\n \"NO\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"SE\",\n \"SI\",\n \"SJ\",\n \"SK\",\n \"SM\",\n \"UA\",\n \"VA\",\n \"XK\"\n ],\n \"151\": [\n \"151\",\n \"BG\",\n \"BY\",\n \"CZ\",\n \"HU\",\n \"MD\",\n \"PL\",\n \"RO\",\n \"RU\",\n \"SK\",\n \"UA\"\n ],\n \"154\": [\n \"154\",\n \"AX\",\n \"CQ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FO\",\n \"GB\",\n \"GG\",\n \"IE\",\n \"IM\",\n \"IS\",\n \"JE\",\n \"LT\",\n \"LV\",\n \"NO\",\n \"SE\",\n \"SJ\"\n ],\n \"155\": [\n \"155\",\n \"AT\",\n \"BE\",\n \"CH\",\n \"DE\",\n \"FR\",\n \"LI\",\n \"LU\",\n \"MC\",\n \"NL\"\n ],\n \"202\": [\n \"011\",\n \"014\",\n \"017\",\n \"018\",\n \"202\",\n \"AO\",\n \"BF\",\n \"BI\",\n \"BJ\",\n \"BW\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CI\",\n \"CM\",\n \"CV\",\n \"DJ\",\n \"ER\",\n \"ET\",\n \"GA\",\n \"GH\",\n \"GM\",\n \"GN\",\n \"GQ\",\n \"GW\",\n \"IO\",\n \"KE\",\n \"KM\",\n \"LR\",\n \"LS\",\n \"MG\",\n \"ML\",\n \"MR\",\n \"MU\",\n \"MW\",\n \"MZ\",\n \"NA\",\n \"NE\",\n \"NG\",\n \"RE\",\n \"RW\",\n \"SC\",\n \"SH\",\n \"SL\",\n \"SN\",\n \"SO\",\n \"SS\",\n \"ST\",\n \"SZ\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TZ\",\n \"UG\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ],\n \"419\": [\n \"005\",\n \"013\",\n \"029\",\n \"419\",\n \"AG\",\n \"AI\",\n \"AR\",\n \"AW\",\n \"BB\",\n \"BL\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BV\",\n \"BZ\",\n \"CL\",\n \"CO\",\n \"CR\",\n \"CU\",\n \"CW\",\n \"DM\",\n \"DO\",\n \"EC\",\n \"FK\",\n \"GD\",\n \"GF\",\n \"GP\",\n \"GS\",\n \"GT\",\n \"GY\",\n \"HN\",\n \"HT\",\n \"JM\",\n \"KN\",\n \"KY\",\n \"LC\",\n \"MF\",\n \"MQ\",\n \"MS\",\n \"MX\",\n \"NI\",\n \"PA\",\n \"PE\",\n \"PR\",\n \"PY\",\n \"SR\",\n \"SV\",\n \"SX\",\n \"TC\",\n \"TT\",\n \"UY\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\"\n ],\n \"EU\": [\n \"AT\",\n \"BE\",\n \"BG\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DK\",\n \"EE\",\n \"ES\",\n \"EU\",\n \"FI\",\n \"FR\",\n \"GR\",\n \"HR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SE\",\n \"SI\",\n \"SK\"\n ],\n \"EZ\": [\n \"AT\",\n \"BE\",\n \"CY\",\n \"DE\",\n \"EE\",\n \"ES\",\n \"EZ\",\n \"FI\",\n \"FR\",\n \"GR\",\n \"IE\",\n \"IT\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"MT\",\n \"NL\",\n \"PT\",\n \"SI\",\n \"SK\"\n ],\n \"QO\": [\n \"AC\",\n \"AQ\",\n \"CP\",\n \"DG\",\n \"QO\",\n \"TA\"\n ],\n \"UN\": [\n \"AD\",\n \"AE\",\n \"AF\",\n \"AG\",\n \"AL\",\n \"AM\",\n \"AO\",\n \"AR\",\n \"AT\",\n \"AU\",\n \"AZ\",\n \"BA\",\n \"BB\",\n \"BD\",\n \"BE\",\n \"BF\",\n \"BG\",\n \"BH\",\n \"BI\",\n \"BJ\",\n \"BN\",\n \"BO\",\n \"BR\",\n \"BS\",\n \"BT\",\n \"BW\",\n \"BY\",\n \"BZ\",\n \"CA\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CH\",\n \"CI\",\n \"CL\",\n \"CM\",\n \"CN\",\n \"CO\",\n \"CR\",\n \"CU\",\n \"CV\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DJ\",\n \"DK\",\n \"DM\",\n \"DO\",\n \"DZ\",\n \"EC\",\n \"EE\",\n \"EG\",\n \"ER\",\n \"ES\",\n \"ET\",\n \"FI\",\n \"FJ\",\n \"FM\",\n \"FR\",\n \"GA\",\n \"GB\",\n \"GD\",\n \"GE\",\n \"GH\",\n \"GM\",\n \"GN\",\n \"GQ\",\n \"GR\",\n \"GT\",\n \"GW\",\n \"GY\",\n \"HN\",\n \"HR\",\n \"HT\",\n \"HU\",\n \"ID\",\n \"IE\",\n \"IL\",\n \"IN\",\n \"IQ\",\n \"IR\",\n \"IS\",\n \"IT\",\n \"JM\",\n \"JO\",\n \"JP\",\n \"KE\",\n \"KG\",\n \"KH\",\n \"KI\",\n \"KM\",\n \"KN\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LC\",\n \"LI\",\n \"LK\",\n \"LR\",\n \"LS\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"LY\",\n \"MA\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MG\",\n \"MH\",\n \"MK\",\n \"ML\",\n \"MM\",\n \"MN\",\n \"MR\",\n \"MT\",\n \"MU\",\n \"MV\",\n \"MW\",\n \"MX\",\n \"MY\",\n \"MZ\",\n \"NA\",\n \"NE\",\n \"NG\",\n \"NI\",\n \"NL\",\n \"NO\",\n \"NP\",\n \"NR\",\n \"NZ\",\n \"OM\",\n \"PA\",\n \"PE\",\n \"PG\",\n \"PH\",\n \"PK\",\n \"PL\",\n \"PT\",\n \"PW\",\n \"PY\",\n \"QA\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"RW\",\n \"SA\",\n \"SB\",\n \"SC\",\n \"SD\",\n \"SE\",\n \"SG\",\n \"SI\",\n \"SK\",\n \"SL\",\n \"SM\",\n \"SN\",\n \"SO\",\n \"SR\",\n \"SS\",\n \"ST\",\n \"SV\",\n \"SY\",\n \"SZ\",\n \"TD\",\n \"TG\",\n \"TH\",\n \"TJ\",\n \"TL\",\n \"TM\",\n \"TN\",\n \"TO\",\n \"TR\",\n \"TT\",\n \"TV\",\n \"TZ\",\n \"UA\",\n \"UG\",\n \"UN\",\n \"US\",\n \"UY\",\n \"UZ\",\n \"VC\",\n \"VE\",\n \"VN\",\n \"VU\",\n \"WS\",\n \"YE\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ]\n};\n","import { __spreadArray } from \"tslib\";\nimport { data as jsonData } from './languageMatching';\nimport { regions } from './regions.generated';\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n if (Err === void 0) { Err = Error; }\n if (!condition) {\n throw new Err(message);\n }\n}\n// This is effectively 2 languages in 2 different regions in the same cluster\nvar DEFAULT_MATCHING_THRESHOLD = 838;\nvar PROCESSED_DATA;\nfunction processData() {\n var _a, _b;\n if (!PROCESSED_DATA) {\n var paradigmLocales = (_b = (_a = jsonData.supplemental.languageMatching['written-new'][0]) === null || _a === void 0 ? void 0 : _a.paradigmLocales) === null || _b === void 0 ? void 0 : _b._locales.split(' ');\n var matchVariables = jsonData.supplemental.languageMatching['written-new'].slice(1, 5);\n var data = jsonData.supplemental.languageMatching['written-new'].slice(5);\n var matches = data.map(function (d) {\n var key = Object.keys(d)[0];\n var value = d[key];\n return {\n supported: key,\n desired: value._desired,\n distance: +value._distance,\n oneway: value.oneway === 'true' ? true : false,\n };\n }, {});\n PROCESSED_DATA = {\n matches: matches,\n matchVariables: matchVariables.reduce(function (all, d) {\n var key = Object.keys(d)[0];\n var value = d[key];\n all[key.slice(1)] = value._value.split('+');\n return all;\n }, {}),\n paradigmLocales: __spreadArray(__spreadArray([], paradigmLocales, true), paradigmLocales.map(function (l) {\n return new Intl.Locale(l.replace(/_/g, '-')).maximize().toString();\n }), true),\n };\n }\n return PROCESSED_DATA;\n}\nfunction isMatched(locale, languageMatchInfoLocale, matchVariables) {\n var _a = languageMatchInfoLocale.split('-'), language = _a[0], script = _a[1], region = _a[2];\n var matches = true;\n if (region && region[0] === '$') {\n var shouldInclude = region[1] !== '!';\n var matchRegions = shouldInclude\n ? matchVariables[region.slice(1)]\n : matchVariables[region.slice(2)];\n var expandedMatchedRegions = matchRegions\n .map(function (r) { return regions[r] || [r]; })\n .reduce(function (all, list) { return __spreadArray(__spreadArray([], all, true), list, true); }, []);\n matches && (matches = !(expandedMatchedRegions.indexOf(locale.region || '') > 1 !=\n shouldInclude));\n }\n else {\n matches && (matches = locale.region\n ? region === '*' || region === locale.region\n : true);\n }\n matches && (matches = locale.script ? script === '*' || script === locale.script : true);\n matches && (matches = locale.language\n ? language === '*' || language === locale.language\n : true);\n return matches;\n}\nfunction serializeLSR(lsr) {\n return [lsr.language, lsr.script, lsr.region].filter(Boolean).join('-');\n}\nfunction findMatchingDistanceForLSR(desired, supported, data) {\n for (var _i = 0, _a = data.matches; _i < _a.length; _i++) {\n var d = _a[_i];\n var matches = isMatched(desired, d.desired, data.matchVariables) &&\n isMatched(supported, d.supported, data.matchVariables);\n if (!d.oneway && !matches) {\n matches =\n isMatched(desired, d.supported, data.matchVariables) &&\n isMatched(supported, d.desired, data.matchVariables);\n }\n if (matches) {\n var distance = d.distance * 10;\n if (data.paradigmLocales.indexOf(serializeLSR(desired)) > -1 !=\n data.paradigmLocales.indexOf(serializeLSR(supported)) > -1) {\n return distance - 1;\n }\n return distance;\n }\n }\n throw new Error('No matching distance found');\n}\nexport function findMatchingDistance(desired, supported) {\n var desiredLocale = new Intl.Locale(desired).maximize();\n var supportedLocale = new Intl.Locale(supported).maximize();\n var desiredLSR = {\n language: desiredLocale.language,\n script: desiredLocale.script || '',\n region: desiredLocale.region || '',\n };\n var supportedLSR = {\n language: supportedLocale.language,\n script: supportedLocale.script || '',\n region: supportedLocale.region || '',\n };\n var matchingDistance = 0;\n var data = processData();\n if (desiredLSR.language !== supportedLSR.language) {\n matchingDistance += findMatchingDistanceForLSR({\n language: desiredLocale.language,\n script: '',\n region: '',\n }, {\n language: supportedLocale.language,\n script: '',\n region: '',\n }, data);\n }\n if (desiredLSR.script !== supportedLSR.script) {\n matchingDistance += findMatchingDistanceForLSR({\n language: desiredLocale.language,\n script: desiredLSR.script,\n region: '',\n }, {\n language: supportedLocale.language,\n script: desiredLSR.script,\n region: '',\n }, data);\n }\n if (desiredLSR.region !== supportedLSR.region) {\n matchingDistance += findMatchingDistanceForLSR(desiredLSR, supportedLSR, data);\n }\n return matchingDistance;\n}\nexport function findBestMatch(requestedLocales, supportedLocales, threshold) {\n if (threshold === void 0) { threshold = DEFAULT_MATCHING_THRESHOLD; }\n var lowestDistance = Infinity;\n var result = {\n matchedDesiredLocale: '',\n distances: {},\n };\n requestedLocales.forEach(function (desired, i) {\n if (!result.distances[desired]) {\n result.distances[desired] = {};\n }\n supportedLocales.forEach(function (supported) {\n // Add some weight to the distance based on the order of the supported locales\n // Add penalty for the order of the requested locales, which currently is 0 since ECMA-402\n // doesn't really have room for weighted locales like `en; q=0.1`\n var distance = findMatchingDistance(desired, supported) + 0 + i * 40;\n result.distances[desired][supported] = distance;\n if (distance < lowestDistance) {\n lowestDistance = distance;\n result.matchedDesiredLocale = desired;\n result.matchedSupportedLocale = supported;\n }\n });\n });\n if (lowestDistance >= threshold) {\n result.matchedDesiredLocale = undefined;\n result.matchedSupportedLocale = undefined;\n }\n return result;\n}\n","import { UNICODE_EXTENSION_SEQUENCE_REGEX, findBestMatch } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-bestfitmatcher\n * @param availableLocales\n * @param requestedLocales\n * @param getDefaultLocale\n */\nexport function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {\n var foundLocale;\n var extension;\n var noExtensionLocales = [];\n var noExtensionLocaleMap = requestedLocales.reduce(function (all, l) {\n var noExtensionLocale = l.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n noExtensionLocales.push(noExtensionLocale);\n all[noExtensionLocale] = l;\n return all;\n }, {});\n var result = findBestMatch(noExtensionLocales, availableLocales);\n if (result.matchedSupportedLocale && result.matchedDesiredLocale) {\n foundLocale = result.matchedSupportedLocale;\n extension =\n noExtensionLocaleMap[result.matchedDesiredLocale].slice(result.matchedDesiredLocale.length) || undefined;\n }\n if (!foundLocale) {\n return { locale: getDefaultLocale() };\n }\n return {\n locale: foundLocale,\n extension: extension,\n };\n}\n","/**\n * https://tc39.es/ecma402/#sec-bestavailablelocale\n * @param availableLocales\n * @param locale\n */\nexport function BestAvailableLocale(availableLocales, locale) {\n var candidate = locale;\n while (true) {\n if (availableLocales.indexOf(candidate) > -1) {\n return candidate;\n }\n var pos = candidate.lastIndexOf('-');\n if (!~pos) {\n return undefined;\n }\n if (pos >= 2 && candidate[pos - 2] === '-') {\n pos -= 2;\n }\n candidate = candidate.slice(0, pos);\n }\n}\n","import { invariant } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-unicodeextensionvalue\n * @param extension\n * @param key\n */\nexport function UnicodeExtensionValue(extension, key) {\n invariant(key.length === 2, 'key must have 2 elements');\n var size = extension.length;\n var searchValue = \"-\".concat(key, \"-\");\n var pos = extension.indexOf(searchValue);\n if (pos !== -1) {\n var start = pos + 4;\n var end = start;\n var k = start;\n var done = false;\n while (!done) {\n var e = extension.indexOf('-', k);\n var len = void 0;\n if (e === -1) {\n len = size - k;\n }\n else {\n len = e - k;\n }\n if (len === 2) {\n done = true;\n }\n else if (e === -1) {\n end = size;\n done = true;\n }\n else {\n end = e;\n k = e + 1;\n }\n }\n return extension.slice(start, end);\n }\n searchValue = \"-\".concat(key);\n pos = extension.indexOf(searchValue);\n if (pos !== -1 && pos + 3 === size) {\n return '';\n }\n return undefined;\n}\n","import { BestFitMatcher } from './BestFitMatcher';\nimport { LookupMatcher } from './LookupMatcher';\nimport { UnicodeExtensionValue } from './UnicodeExtensionValue';\nimport { invariant } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-resolvelocale\n */\nexport function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {\n var matcher = options.localeMatcher;\n var r;\n if (matcher === 'lookup') {\n r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);\n }\n else {\n r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);\n }\n var foundLocale = r.locale;\n var result = { locale: '', dataLocale: foundLocale };\n var supportedExtension = '-u';\n for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {\n var key = relevantExtensionKeys_1[_i];\n invariant(foundLocale in localeData, \"Missing locale data for \".concat(foundLocale));\n var foundLocaleData = localeData[foundLocale];\n invariant(typeof foundLocaleData === 'object' && foundLocaleData !== null, \"locale data \".concat(key, \" must be an object\"));\n var keyLocaleData = foundLocaleData[key];\n invariant(Array.isArray(keyLocaleData), \"keyLocaleData for \".concat(key, \" must be an array\"));\n var value = keyLocaleData[0];\n invariant(typeof value === 'string' || value === null, \"value must be string or null but got \".concat(typeof value, \" in key \").concat(key));\n var supportedExtensionAddition = '';\n if (r.extension) {\n var requestedValue = UnicodeExtensionValue(r.extension, key);\n if (requestedValue !== undefined) {\n if (requestedValue !== '') {\n if (~keyLocaleData.indexOf(requestedValue)) {\n value = requestedValue;\n supportedExtensionAddition = \"-\".concat(key, \"-\").concat(value);\n }\n }\n else if (~requestedValue.indexOf('true')) {\n value = 'true';\n supportedExtensionAddition = \"-\".concat(key);\n }\n }\n }\n if (key in options) {\n var optionsValue = options[key];\n invariant(typeof optionsValue === 'string' ||\n typeof optionsValue === 'undefined' ||\n optionsValue === null, 'optionsValue must be String, Undefined or Null');\n if (~keyLocaleData.indexOf(optionsValue)) {\n if (optionsValue !== value) {\n value = optionsValue;\n supportedExtensionAddition = '';\n }\n }\n }\n result[key] = value;\n supportedExtension += supportedExtensionAddition;\n }\n if (supportedExtension.length > 2) {\n var privateIndex = foundLocale.indexOf('-x-');\n if (privateIndex === -1) {\n foundLocale = foundLocale + supportedExtension;\n }\n else {\n var preExtension = foundLocale.slice(0, privateIndex);\n var postExtension = foundLocale.slice(privateIndex, foundLocale.length);\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n foundLocale = Intl.getCanonicalLocales(foundLocale)[0];\n }\n result.locale = foundLocale;\n return result;\n}\n","import { BestAvailableLocale } from './BestAvailableLocale';\nimport { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-lookupmatcher\n * @param availableLocales\n * @param requestedLocales\n * @param getDefaultLocale\n */\nexport function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {\n var result = { locale: '' };\n for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n var locale = requestedLocales_1[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);\n if (availableLocale) {\n result.locale = availableLocale;\n if (locale !== noExtensionLocale) {\n result.extension = locale.slice(noExtensionLocale.length, locale.length);\n }\n return result;\n }\n }\n result.locale = getDefaultLocale();\n return result;\n}\n","import { BestAvailableLocale } from './BestAvailableLocale';\nimport { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';\n/**\n * https://tc39.es/ecma402/#sec-lookupsupportedlocales\n * @param availableLocales\n * @param requestedLocales\n */\nexport function LookupSupportedLocales(availableLocales, requestedLocales) {\n var subset = [];\n for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n var locale = requestedLocales_1[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');\n var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);\n if (availableLocale) {\n subset.push(availableLocale);\n }\n }\n return subset;\n}\n","import { CanonicalizeLocaleList } from './abstract/CanonicalizeLocaleList';\nimport { ResolveLocale } from './abstract/ResolveLocale';\nexport function match(requestedLocales, availableLocales, defaultLocale, opts) {\n return ResolveLocale(availableLocales, CanonicalizeLocaleList(requestedLocales), {\n localeMatcher: (opts === null || opts === void 0 ? void 0 : opts.algorithm) || 'best fit',\n }, [], {}, function () { return defaultLocale; }).locale;\n}\nexport { LookupSupportedLocales } from './abstract/LookupSupportedLocales';\nexport { ResolveLocale } from './abstract/ResolveLocale';\n","/**\n * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist\n * @param locales\n */\nexport function CanonicalizeLocaleList(locales) {\n // TODO\n return Intl.getCanonicalLocales(locales);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar segmenter_1 = require(\"./src/segmenter\");\nvar should_polyfill_1 = require(\"./should-polyfill\");\nif ((0, should_polyfill_1.shouldPolyfill)()) {\n Object.defineProperty(Intl, 'Segmenter', {\n value: segmenter_1.Segmenter,\n enumerable: false,\n writable: true,\n configurable: true,\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldPolyfill = void 0;\nfunction shouldPolyfill() {\n return !Intl.Segmenter;\n}\nexports.shouldPolyfill = shouldPolyfill;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SegmentationRules = void 0;\n/* @generated */\n// prettier-ignore\nexports.SegmentationRules = {\n \"de\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"Port.\",\n \"Alt.\",\n \"Di.\",\n \"Ges.\",\n \"frz.\",\n \"entspr.\",\n \"Gebr.\",\n \"erw.\",\n \"Frl.\",\n \"Inh.\",\n \"k.u.k.\",\n \"Ca.\",\n \"J.D.\",\n \"Ausg.\",\n \"evtl.\",\n \"So.\",\n \"i.B.\",\n \"s.a.\",\n \"kgl.\",\n \"Sept.\",\n \"o.B.\",\n \"Sa.\",\n \"ev.\",\n \"Dez.\",\n \"am.\",\n \"i.R.\",\n \"eigtl.\",\n \"i.J.\",\n \"u.U.\",\n \"G.\",\n \"z.Hd.\",\n \"u.A.w.g.\",\n \"Kl.\",\n \"Spezif.\",\n \"Obj.\",\n \"Ing.\",\n \"D. h.\",\n \"Folg.\",\n \"Akt.\",\n \"i.A.\",\n \"Msp.\",\n \"U.U.\",\n \"Chr.\",\n \"R.\",\n \"Einh.\",\n \"schwäb.\",\n \"Vgl.\",\n \"Aug.\",\n \"Dipl.-Ing.\",\n \"W.\",\n \"B.\",\n \"U. U.\",\n \"J.\",\n \"Fa.\",\n \"Mo.\",\n \"n.u.Z.\",\n \"Op.\",\n \"Mrd.\",\n \"e.h.\",\n \"Hr.\",\n \"Hrn.\",\n \"Ztr.\",\n \"k. u. k.\",\n \"Bibl.\",\n \"d.Ä.\",\n \"b.\",\n \"M.\",\n \"i.H.\",\n \"v.R.w.\",\n \"o.A.\",\n \"St.\",\n \"Dr.\",\n \"Fn.\",\n \"Abs.\",\n \"Rd.\",\n \"Dtzd.\",\n \"Jahrh.\",\n \"Z.\",\n \"Std.\",\n \"n. Chr.\",\n \"möbl.\",\n \"tägl.\",\n \"gest.\",\n \"gesch.\",\n \"z.B.\",\n \"Hbf.\",\n \"Abt.\",\n \"A.M.\",\n \"e.Wz.\",\n \"v.T.\",\n \"Nov.\",\n \"z.\",\n \"Prot.\",\n \"U.S.\",\n \"Wg.\",\n \"u.v.a.\",\n \"Adr.\",\n \"App.\",\n \"ggf.\",\n \"ggfs.\",\n \"Jan.\",\n \"O.\",\n \"Rel.\",\n \"od.\",\n \"Pfd.\",\n \"a.a.O.\",\n \"p.Adr.\",\n \"P.\",\n \"Gem.\",\n \"v. Chr.\",\n \"Art.\",\n \"z.Z.\",\n \"S.A.\",\n \"i.V.\",\n \"verh.\",\n \"Ausschl.\",\n \"m.W.\",\n \"Dir.\",\n \"Verf.\",\n \"Sek.\",\n \"r.\",\n \"Chin.\",\n \"Feb.\",\n \"Int.\",\n \"Sep.\",\n \"Gesch.\",\n \"schweiz.\",\n \"Bed.\",\n \"a.Rh.\",\n \"jew.\",\n \"vgl.\",\n \"a.M.\",\n \"Str.\",\n \"exkl.\",\n \"gek.\",\n \"Erf.\",\n \"u.Ä.\",\n \"ehem.\",\n \"näml.\",\n \"u. Z.\",\n \"v. u. Z.\",\n \"sog.\",\n \"C.\",\n \"Dipl.-Kfm.\",\n \"mtl.\",\n \"Hrsg.\",\n \"Qu.\",\n \"röm.\",\n \"u.\",\n \"U.\",\n \"Adj.\",\n \"Kap.\",\n \"hpts.\",\n \"a.D.\",\n \"gedr.\",\n \"Best.\",\n \"N.\",\n \"v.u.Z.\",\n \"Phys.\",\n \"Fr.\",\n \"d.J.\",\n \"Reg.-Bez.\",\n \"m.E.\",\n \"schles.\",\n \"Max.\",\n \"Ltd.\",\n \"südd.\",\n \"inkl.\",\n \"geb.\",\n \"Ggf.\",\n \"Inc.\",\n \"kath.\",\n \"kfm.\",\n \"Nr.\",\n \"Proz.\",\n \"Dim.\",\n \"verw.\",\n \"Reg.\",\n \"Dat.\",\n \"Evtl.\",\n \"led.\",\n \"F.\",\n \"Test.\",\n \"Schr.\",\n \"Do.\",\n \"PIN.\",\n \"Z. Zt.\",\n \"v.Chr.\",\n \"Tägl.\",\n \"s.\",\n \"amtl.\",\n \"Temp.\",\n \"Mind.\",\n \"e.V.\",\n \"Abw.\",\n \"P.M.\",\n \"F.f.\",\n \"a.a.S.\",\n \"Mod.\",\n \"Co.\",\n \"Min.\",\n \"Allg.\",\n \"Geograph.\",\n \"Jr.\",\n \"Urspr.\",\n \"Apr.\",\n \"Z. B.\",\n \"v.H.\",\n \"A.\",\n \"einschl.\",\n \"Trans.\",\n \"zzgl.\",\n \"StR.\",\n \"Fam.\",\n \"I.\",\n \"jhrl.\",\n \"u.a.\",\n \"Ben.\",\n \"o.g.\",\n \"Kfm.\",\n \"Konv.\",\n \"Mi.\",\n \"L.\",\n \"beil.\",\n \"T.\",\n \"Ursprüngl.\",\n \"röm.-kath.\",\n \"Okt.\",\n \"u.ä.\",\n \"Tel.\",\n \"D.\",\n \"Ber.\",\n \"Kop.\",\n \"Mio.\",\n \"Y.\",\n \"U.S.A.\",\n \"v. H.\",\n \"Forts. f.\",\n \"Rep.\",\n \"Hptst.\",\n \"österr.\"\n ],\n \"variables\": {}\n }\n },\n \"el\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [],\n \"variables\": {\n \"$STerm\": \"((?:[!;\\\\?\\\\u037E\\\\u0589\\\\u061D-\\\\u061F\\\\u06D4\\\\u0700-\\\\u0702\\\\u07F9\\\\u0837\\\\u0839\\\\u083D\\\\u083E\\\\u0964\\\\u0965\\\\u104A\\\\u104B\\\\u1362\\\\u1367\\\\u1368\\\\u166E\\\\u1735\\\\u1736\\\\u1803\\\\u1809\\\\u1944\\\\u1945\\\\u1AA8-\\\\u1AAB\\\\u1B5A\\\\u1B5B\\\\u1B5E\\\\u1B5F\\\\u1B7D\\\\u1B7E\\\\u1C3B\\\\u1C3C\\\\u1C7E\\\\u1C7F\\\\u203C\\\\u203D\\\\u2047-\\\\u2049\\\\u2E2E\\\\u2E3C\\\\u2E53\\\\u2E54\\\\u3002\\\\uA4FF\\\\uA60E\\\\uA60F\\\\uA6F3\\\\uA6F7\\\\uA876\\\\uA877\\\\uA8CE\\\\uA8CF\\\\uA92F\\\\uA9C8\\\\uA9C9\\\\uAA5D-\\\\uAA5F\\\\uAAF0\\\\uAAF1\\\\uABEB\\\\uFE56\\\\uFE57\\\\uFF01\\\\uFF1F\\\\uFF61]|\\\\uD802[\\\\uDE56\\\\uDE57]|\\\\uD803[\\\\uDF55-\\\\uDF59\\\\uDF86-\\\\uDF89]|\\\\uD804[\\\\uDC47\\\\uDC48\\\\uDCBE-\\\\uDCC1\\\\uDD41-\\\\uDD43\\\\uDDC5\\\\uDDC6\\\\uDDCD\\\\uDDDE\\\\uDDDF\\\\uDE38\\\\uDE39\\\\uDE3B\\\\uDE3C\\\\uDEA9]|\\\\uD805[\\\\uDC4B\\\\uDC4C\\\\uDDC2\\\\uDDC3\\\\uDDC9-\\\\uDDD7\\\\uDE41\\\\uDE42\\\\uDF3C-\\\\uDF3E]|\\\\uD806[\\\\uDD44\\\\uDD46\\\\uDE42\\\\uDE43\\\\uDE9B\\\\uDE9C]|\\\\uD807[\\\\uDC41\\\\uDC42\\\\uDEF7\\\\uDEF8\\\\uDF43\\\\uDF44]|\\\\uD81A[\\\\uDE6E\\\\uDE6F\\\\uDEF5\\\\uDF37\\\\uDF38\\\\uDF44]|\\\\uD81B\\\\uDE98|\\\\uD82F\\\\uDC9F|\\\\uD836\\\\uDE88)(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\"\n }\n }\n },\n \"en\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"L.P.\",\n \"Alt.\",\n \"Approx.\",\n \"E.G.\",\n \"O.\",\n \"Maj.\",\n \"Misc.\",\n \"P.O.\",\n \"J.D.\",\n \"Jam.\",\n \"Card.\",\n \"Dec.\",\n \"Sept.\",\n \"MR.\",\n \"Long.\",\n \"Hat.\",\n \"G.\",\n \"Link.\",\n \"DC.\",\n \"D.C.\",\n \"M.T.\",\n \"Hz.\",\n \"Mrs.\",\n \"By.\",\n \"Act.\",\n \"Var.\",\n \"N.V.\",\n \"Aug.\",\n \"B.\",\n \"S.A.\",\n \"Up.\",\n \"Job.\",\n \"Num.\",\n \"M.I.T.\",\n \"Ok.\",\n \"Org.\",\n \"Ex.\",\n \"Cont.\",\n \"U.\",\n \"Mart.\",\n \"Fn.\",\n \"Abs.\",\n \"Lt.\",\n \"OK.\",\n \"Z.\",\n \"E.\",\n \"Kb.\",\n \"Est.\",\n \"A.M.\",\n \"L.A.\",\n \"Prof.\",\n \"U.S.\",\n \"Nov.\",\n \"Ph.D.\",\n \"Mar.\",\n \"I.T.\",\n \"exec.\",\n \"Jan.\",\n \"N.Y.\",\n \"X.\",\n \"Md.\",\n \"Op.\",\n \"vs.\",\n \"D.A.\",\n \"A.D.\",\n \"R.L.\",\n \"P.M.\",\n \"Or.\",\n \"M.R.\",\n \"Cap.\",\n \"PC.\",\n \"Feb.\",\n \"Exec.\",\n \"I.e.\",\n \"Sep.\",\n \"Gb.\",\n \"K.\",\n \"U.S.C.\",\n \"Mt.\",\n \"S.\",\n \"A.S.\",\n \"C.O.D.\",\n \"Capt.\",\n \"Col.\",\n \"In.\",\n \"C.F.\",\n \"Adj.\",\n \"AD.\",\n \"I.D.\",\n \"Mgr.\",\n \"R.T.\",\n \"B.V.\",\n \"M.\",\n \"Conn.\",\n \"Yr.\",\n \"Rev.\",\n \"Phys.\",\n \"pp.\",\n \"Ms.\",\n \"To.\",\n \"Sgt.\",\n \"J.K.\",\n \"Nr.\",\n \"Jun.\",\n \"Fri.\",\n \"S.A.R.\",\n \"Lev.\",\n \"Lt.Cdr.\",\n \"Def.\",\n \"F.\",\n \"Do.\",\n \"Joe.\",\n \"Id.\",\n \"Mr.\",\n \"Dept.\",\n \"Is.\",\n \"Pvt.\",\n \"Diff.\",\n \"Hon.B.A.\",\n \"Q.\",\n \"Mb.\",\n \"On.\",\n \"Min.\",\n \"J.B.\",\n \"Ed.\",\n \"AB.\",\n \"A.\",\n \"S.p.A.\",\n \"I.\",\n \"a.m.\",\n \"Comm.\",\n \"Go.\",\n \"VS.\",\n \"L.\",\n \"All.\",\n \"PP.\",\n \"P.V.\",\n \"T.\",\n \"K.R.\",\n \"Etc.\",\n \"D.\",\n \"Adv.\",\n \"Lib.\",\n \"E.g.\",\n \"Pro.\",\n \"U.S.A.\",\n \"S.E.\",\n \"AA.\",\n \"Rep.\",\n \"Sq.\",\n \"As.\"\n ],\n \"variables\": {}\n }\n },\n \"es\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"Rdos.\",\n \"JJ.OO.\",\n \"Sres.\",\n \"fig.\",\n \"may.\",\n \"RR.HH.\",\n \"oct.\",\n \"cap.\",\n \"mié.\",\n \"doc.\",\n \"Excmo.\",\n \"Trab.\",\n \"Excmos.\",\n \"Kit.\",\n \"Inc.\",\n \"FF.CC.\",\n \"DC.\",\n \"ago.\",\n \"trad.\",\n \"SA.\",\n \"Rvdos.\",\n \"ed.\",\n \"Exmo.\",\n \"jul.\",\n \"col.\",\n \"RAM.\",\n \"Srtas.\",\n \"ene.\",\n \"Rol.\",\n \"Fabric.\",\n \"Comm.\",\n \"vid.\",\n \"Da.\",\n \"dic.\",\n \"ss.\",\n \"abr.\",\n \"ntra.\",\n \"Sra.\",\n \"dtor.\",\n \"cf.\",\n \"dom.\",\n \"prov.\",\n \"Emm.\",\n \"Sr.\",\n \"licdo.\",\n \"p.ej.\",\n \"bol.\",\n \"figs.\",\n \"Vda.\",\n \"Dr.\",\n \"ntro.\",\n \"Desv.\",\n \"O.M.\",\n \"Ldo.\",\n \"Drs.\",\n \"sáb.\",\n \"feb.\",\n \"Ltda.\",\n \"Lcda.\",\n \"Exma.\",\n \"C.V.\",\n \"SS.MM.\",\n \"Lda.\",\n \"U.S.\",\n \"hnos.\",\n \"R.D.\",\n \"Korn.\",\n \"v.gr.\",\n \"vs.\",\n \"Ilmas.\",\n \"Rdo.\",\n \"ej.\",\n \"vie.\",\n \"jue.\",\n \"a. C.\",\n \"Ilmos.\",\n \"e. c.\",\n \"Excma.\",\n \"afma.\",\n \"licda.\",\n \"Em.\",\n \"K.\",\n \"sras.\",\n \"MM.\",\n \"fund.\",\n \"Mons.\",\n \"Lcdo.\",\n \"afmo.\",\n \"C.\",\n \"A.C.\",\n \"dptos.\",\n \"Col.\",\n \"Srta.\",\n \"Av.\",\n \"Ant.\",\n \"depto.\",\n \"Var.\",\n \"H.P.\",\n \"D.\",\n \"M.\",\n \"C.P.\",\n \"Rev.\",\n \"Rvdmos.\",\n \"Fr.\",\n \"Ilmo.\",\n \"afmos.\",\n \"Ltd.\",\n \"afmas.\",\n \"prof.\",\n \"lun.\",\n \"SS.AA.\",\n \"Sol.\",\n \"nov.\",\n \"mss.\",\n \"Dña.\",\n \"Seg.\",\n \"mar.\",\n \"Rvdmo.\",\n \"Reg.\",\n \"ms.\",\n \"Sras.\",\n \"sres.\",\n \"U.S.A.\",\n \"Sta.\",\n \"Sdad.\",\n \"Dra.\",\n \"srs.\",\n \"R.U.\",\n \"deptos.\",\n \"dpto.\",\n \"jun.\",\n \"bco.\",\n \"Cía.\",\n \"Id.\",\n \"Mr.\",\n \"e.g.\",\n \"C.S.\",\n \"Excmas.\",\n \"Dª.\",\n \"Rvdo.\",\n \"Lic.\",\n \"cfr.\",\n \"Corp.\",\n \"Dto.\",\n \"Ilma.\",\n \"L.\",\n \"All.\",\n \"PP.\",\n \"d. C.\",\n \"Ltdo.\",\n \"mtro.\",\n \"Mrs.\",\n \"Desc.\",\n \"Avda.\",\n \"Exmas.\",\n \"a. e. c.\",\n \"Bien.\",\n \"Exmos.\",\n \"AA.\",\n \"Sto.\",\n \"CA.\",\n \"sept.\",\n \"Exc.\",\n \"c/c.\"\n ],\n \"variables\": {}\n }\n },\n \"fr\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"aux.\",\n \"config.\",\n \"collab.\",\n \"M.\",\n \"dim.\",\n \"imprim.\",\n \"oct.\",\n \"syst.\",\n \"bull.\",\n \"MM.\",\n \"doc.\",\n \"P.O.\",\n \"hôp.\",\n \"Mart.\",\n \"juil.\",\n \"broch.\",\n \"adr.\",\n \"symb.\",\n \"C.\",\n \"anc.\",\n \"voit.\",\n \"Jr.\",\n \"graph.\",\n \"dir.\",\n \"éd.\",\n \"fig.\",\n \"édit.\",\n \"niv.\",\n \"quart.\",\n \"cam.\",\n \"éval.\",\n \"anon.\",\n \"réf.\",\n \"Comm.\",\n \"Prof.\",\n \"févr.\",\n \"indus.\",\n \"DC.\",\n \"équiv.\",\n \"illustr.\",\n \"acoust.\",\n \"nov.\",\n \"L.\",\n \"All.\",\n \"U.S.\",\n \"S.M.A.R.T.\",\n \"sept.\",\n \"avr.\",\n \"jeu.\",\n \"dest.\",\n \"P.-D. G.\",\n \"ill.\",\n \"coll.\",\n \"encycl.\",\n \"mer.\",\n \"Desc.\",\n \"ven.\",\n \"P.\",\n \"lun.\",\n \"Inc.\",\n \"sam.\",\n \"D.\",\n \"append.\",\n \"Var.\",\n \"categ.\",\n \"janv.\",\n \"S.A.\",\n \"imm.\",\n \"U.S.A.\",\n \"mar.\",\n \"exempl.\",\n \"déc.\",\n \"ann.\",\n \"U.\",\n \"synth.\",\n \"dict.\",\n \"av. J.-C.\",\n \"W.\",\n \"Op.\",\n \"ap. J.-C.\",\n \"gouv.\",\n \"trav. publ.\"\n ],\n \"variables\": {}\n }\n },\n \"it\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"N.B.\",\n \"div.\",\n \"a.C.\",\n \"fig.\",\n \"d.p.R.\",\n \"c.c.p.\",\n \"Cfr.\",\n \"vol.\",\n \"Geom.\",\n \"O.d.G.\",\n \"S.p.A.\",\n \"ver.\",\n \"N.d.A.\",\n \"dott.\",\n \"arch.\",\n \"d.C.\",\n \"N.d.T.\",\n \"rag.\",\n \"Sig.\",\n \"Mod.\",\n \"pag.\",\n \"dr.\",\n \"tav.\",\n \"N.d.E.\",\n \"DC.\",\n \"mitt.\",\n \"Ing.\",\n \"int.\",\n \"on.\",\n \"C.P.\",\n \"ag.\",\n \"L.\",\n \"U.S.\",\n \"S.M.A.R.T.\",\n \"p.i.\",\n \"tab.\",\n \"Ltd.\",\n \"Liv.\",\n \"D.\",\n \"U.S.A.\",\n \"sez.\",\n \"avv.\",\n \"S.A.R.\",\n \"all.\",\n \"p.\"\n ],\n \"variables\": {}\n }\n },\n \"ja\": {\n \"word\": {\n \"segmentRules\": {\n \"13.3\": {\n \"after\": \"$Hiragana\",\n \"before\": \"$Hiragana\",\n \"breaks\": false\n },\n \"13.4\": {\n \"after\": \"$Ideographic\",\n \"before\": \"$Ideographic\",\n \"breaks\": false\n }\n },\n \"suppressions\": [],\n \"variables\": {\n \"$Hiragana\": \"((?:[\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F]|\\\\uD82C[\\\\uDC01-\\\\uDD1F\\\\uDD32\\\\uDD50-\\\\uDD52]|\\\\uD83C\\\\uDE00)(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Ideographic\": \"((?:[\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3038-\\\\u303B\\\\u3400-\\\\u4DBF\\\\u4E00-\\\\u9FFF\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9]|\\\\uD81B\\\\uDFE4|[\\\\uD81C-\\\\uD820\\\\uD822\\\\uD840-\\\\uD868\\\\uD86A-\\\\uD86C\\\\uD86F-\\\\uD872\\\\uD874-\\\\uD879\\\\uD880-\\\\uD883\\\\uD885-\\\\uD887][\\\\uDC00-\\\\uDFFF]|\\\\uD821[\\\\uDC00-\\\\uDFF7]|\\\\uD823[\\\\uDC00-\\\\uDCD5\\\\uDD00-\\\\uDD08]|\\\\uD82C[\\\\uDD70-\\\\uDEFB]|\\\\uD869[\\\\uDC00-\\\\uDEDF\\\\uDF00-\\\\uDFFF]|\\\\uD86D[\\\\uDC00-\\\\uDF39\\\\uDF40-\\\\uDFFF]|\\\\uD86E[\\\\uDC00-\\\\uDC1D\\\\uDC20-\\\\uDFFF]|\\\\uD873[\\\\uDC00-\\\\uDEA1\\\\uDEB0-\\\\uDFFF]|\\\\uD87A[\\\\uDC00-\\\\uDFE0]|\\\\uD87E[\\\\uDC00-\\\\uDE1D]|\\\\uD884[\\\\uDC00-\\\\uDF4A\\\\uDF50-\\\\uDFFF]|\\\\uD888[\\\\uDC00-\\\\uDFAF])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\"\n }\n }\n },\n \"pt\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"psicol.\",\n \"fig.\",\n \"compl.\",\n \"rep.\",\n \"cap.\",\n \"doc.\",\n \"fisiol.\",\n \"dipl.\",\n \"astron.\",\n \"port.\",\n \"eletrôn.\",\n \"geom.\",\n \"mov.\",\n \"ago.\",\n \"trad.\",\n \"arquit.\",\n \"dez.\",\n \"ed.\",\n \"apt.\",\n \"Exmo.\",\n \"col.\",\n \"ff.\",\n \"univ.\",\n \"res.\",\n \"R.\",\n \"transp.\",\n \"D.C\",\n \"l.\",\n \"des.\",\n \"fev.\",\n \"abr.\",\n \"liter.\",\n \"lat.\",\n \"Dir.\",\n \"cf.\",\n \"adm.\",\n \"fot.\",\n \"p.m.\",\n \"P.M.\",\n \"créd.\",\n \"jur.\",\n \"com.\",\n \"anat.\",\n \"dir.\",\n \"end.\",\n \"fís.\",\n \"E.\",\n \"Est.\",\n \"cont.\",\n \"matem.\",\n \"Drs.\",\n \"gên.\",\n \"neol.\",\n \"pág.\",\n \"índ.\",\n \"Ltda.\",\n \"Exma.\",\n \"esp.\",\n \"ingl.\",\n \"tecnol.\",\n \"Mar.\",\n \"símb.\",\n \"Pe.\",\n \"pal.\",\n \"filos.\",\n \"V.T.\",\n \"fasc.\",\n \"vs.\",\n \"mai.\",\n \"S.A.\",\n \"profa.\",\n \"N.Sra.\",\n \"r.s.v.p.\",\n \"cel.\",\n \"mat.\",\n \"abrev.\",\n \"out.\",\n \"long.\",\n \"aux.\",\n \"arit.\",\n \"aer.\",\n \"jul.\",\n \"lin.\",\n \"S.\",\n \"méd.\",\n \"odontol.\",\n \"org.\",\n \"A.C.\",\n \"jun.\",\n \"déb.\",\n \"Av.\",\n \"álg.\",\n \"sup.\",\n \"fl.\",\n \"odont.\",\n \"caps.\",\n \"relat.\",\n \"organiz.\",\n \"hist.\",\n \"Fr.\",\n \"Ilmo.\",\n \"fem.\",\n \"ap.\",\n \"Ltd.\",\n \"pol.\",\n \"séc.\",\n \"prof.\",\n \"cx.\",\n \"nov.\",\n \"quím.\",\n \"mús.\",\n \"agric.\",\n \"mar.\",\n \"W.C.\",\n \"fr.\",\n \"cat.\",\n \"jan.\",\n \"pron.\",\n \"rel.\",\n \"autom.\",\n \"Sta.\",\n \"Dra.\",\n \"p.\",\n \"tel.\",\n \"div.\",\n \"p. ex.\",\n \"a.C.\",\n \"bras.\",\n \"Alm.\",\n \"Dr.\",\n \"comp.\",\n \"pq.\",\n \"arqueol.\",\n \"náut.\",\n \"biogr.\",\n \"f.\",\n \"círc.\",\n \"fac.\",\n \"d.C.\",\n \"apart.\",\n \"ex.\",\n \"Jr.\",\n \"set.\",\n \"tec.\",\n \"sociol.\",\n \"gram.\",\n \"ind.\",\n \"Ilma.\",\n \"vol.\",\n \"eng.\",\n \"rod.\",\n \"Ph.D.\",\n \"Dras.\",\n \"pp.\",\n \"elem.\",\n \"máq.\",\n \"cód.\",\n \"eletr.\",\n \"prod.\",\n \"ref.\",\n \"fil.\",\n \"a.m.\",\n \"A.M\",\n \"obs.\",\n \"N.T.\",\n \"contab.\",\n \"Sto.\",\n \"lit.\",\n \"educ.\",\n \"rementente\",\n \"desc.\",\n \"próx.\"\n ],\n \"variables\": {}\n }\n },\n \"root\": {\n \"grapheme\": {\n \"segmentRules\": {\n \"11\": {\n \"after\": \"$ExtPict\",\n \"before\": \"$ExtPict$Extend*$ZWJ\",\n \"breaks\": false\n },\n \"12\": {\n \"after\": \"$RI\",\n \"before\": \"^($RI$RI)*$RI\",\n \"breaks\": false\n },\n \"13\": {\n \"after\": \"$RI\",\n \"before\": \"[^\\\\uDDE6-\\\\uDDFF]($RI$RI)*$RI\",\n \"breaks\": false\n },\n \"3\": {\n \"after\": \"$LF\",\n \"before\": \"$CR\",\n \"breaks\": false\n },\n \"4\": {\n \"before\": \"($Control|$CR|$LF)\",\n \"breaks\": true\n },\n \"5\": {\n \"after\": \"($Control|$CR|$LF)\",\n \"breaks\": true\n },\n \"6\": {\n \"after\": \"($L|$V|$LV|$LVT)\",\n \"before\": \"$L\",\n \"breaks\": false\n },\n \"7\": {\n \"after\": \"($V|$T)\",\n \"before\": \"($LV|$V)\",\n \"breaks\": false\n },\n \"8\": {\n \"after\": \"$T\",\n \"before\": \"($LVT|$T)\",\n \"breaks\": false\n },\n \"9\": {\n \"after\": \"($Extend|$ZWJ)\",\n \"breaks\": false\n },\n \"9.1\": {\n \"after\": \"$SpacingMark\",\n \"breaks\": false\n },\n \"9.2\": {\n \"before\": \"$Prepend\",\n \"breaks\": false\n },\n \"9.3\": {\n \"after\": \"$LinkingConsonant\",\n \"before\": \"$LinkingConsonant$ExtCccZwj*$Virama$ExtCccZwj*\",\n \"breaks\": false\n }\n },\n \"suppressions\": [],\n \"variables\": {\n \"$CR\": \"\\\\r\",\n \"$Control\": \"(?:[\\\\0-\\\\t\\\\x0B\\\\f\\\\x0E-\\\\x1F\\\\x7F-\\\\x9F\\\\xAD\\\\u061C\\\\u180E\\\\u200B\\\\u200E\\\\u200F\\\\u2028-\\\\u202E\\\\u2060-\\\\u206F\\\\uFEFF\\\\uFFF0-\\\\uFFFB]|\\\\uD80D[\\\\uDC30-\\\\uDC3F]|\\\\uD82F[\\\\uDCA0-\\\\uDCA3]|\\\\uD834[\\\\uDD73-\\\\uDD7A]|\\\\uDB40[\\\\uDC00-\\\\uDC1F\\\\uDC80-\\\\uDCFF\\\\uDDF0-\\\\uDFFF]|[\\\\uDB41-\\\\uDB43][\\\\uDC00-\\\\uDFFF])\",\n \"$ExtCccZwj\": \"(?:[\\\\u0300-\\\\u034E\\\\u0350-\\\\u036F\\\\u0483-\\\\u0487\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0610-\\\\u061A\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DC\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u0711\\\\u0730-\\\\u074A\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0898-\\\\u089F\\\\u08CA-\\\\u08E1\\\\u08E3-\\\\u08FF\\\\u093C\\\\u094D\\\\u0951-\\\\u0954\\\\u09BC\\\\u09CD\\\\u09FE\\\\u0A3C\\\\u0A4D\\\\u0ABC\\\\u0ACD\\\\u0B3C\\\\u0B4D\\\\u0BCD\\\\u0C3C\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0CBC\\\\u0CCD\\\\u0D3B\\\\u0D3C\\\\u0D4D\\\\u0DCA\\\\u0E38-\\\\u0E3A\\\\u0E48-\\\\u0E4B\\\\u0EB8-\\\\u0EBA\\\\u0EC8-\\\\u0ECB\\\\u0F18\\\\u0F19\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F71\\\\u0F72\\\\u0F74\\\\u0F7A-\\\\u0F7D\\\\u0F80\\\\u0F82-\\\\u0F84\\\\u0F86\\\\u0F87\\\\u0FC6\\\\u1037\\\\u1039\\\\u103A\\\\u108D\\\\u135D-\\\\u135F\\\\u1714\\\\u17D2\\\\u17DD\\\\u18A9\\\\u1939-\\\\u193B\\\\u1A17\\\\u1A18\\\\u1A60\\\\u1A75-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ABD\\\\u1ABF-\\\\u1ACE\\\\u1B34\\\\u1B6B-\\\\u1B73\\\\u1BAB\\\\u1BE6\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE0\\\\u1CE2-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF8\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200D\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA806\\\\uA82C\\\\uA8C4\\\\uA8E0-\\\\uA8F1\\\\uA92B-\\\\uA92D\\\\uA9B3\\\\uAAB0\\\\uAAB2-\\\\uAAB4\\\\uAAB7\\\\uAAB8\\\\uAABE\\\\uAABF\\\\uAAC1\\\\uAAF6\\\\uABED\\\\uFB1E\\\\uFE20-\\\\uFE2F]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE0D\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC46\\\\uDC70\\\\uDC7F\\\\uDCB9\\\\uDCBA\\\\uDD00-\\\\uDD02\\\\uDD33\\\\uDD34\\\\uDD73\\\\uDDCA\\\\uDE36\\\\uDEE9\\\\uDEEA\\\\uDF3B\\\\uDF3C\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC42\\\\uDC46\\\\uDC5E\\\\uDCC2\\\\uDCC3\\\\uDDBF\\\\uDDC0\\\\uDE3F\\\\uDEB7\\\\uDF2B]|\\\\uD806[\\\\uDC39\\\\uDC3A\\\\uDD3E\\\\uDD43\\\\uDDE0\\\\uDE34\\\\uDE47\\\\uDE99]|\\\\uD807[\\\\uDC3F\\\\uDD42\\\\uDD44\\\\uDD45\\\\uDD97\\\\uDF42]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD82F\\\\uDC9E|\\\\uD834[\\\\uDD65\\\\uDD67-\\\\uDD69\\\\uDD6E-\\\\uDD72\\\\uDD7B-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A])\",\n \"$ExtPict\": \"(?:[\\\\xA9\\\\xAE\\\\u203C\\\\u2049\\\\u2122\\\\u2139\\\\u2194-\\\\u2199\\\\u21A9\\\\u21AA\\\\u231A\\\\u231B\\\\u2328\\\\u2388\\\\u23CF\\\\u23E9-\\\\u23F3\\\\u23F8-\\\\u23FA\\\\u24C2\\\\u25AA\\\\u25AB\\\\u25B6\\\\u25C0\\\\u25FB-\\\\u25FE\\\\u2600-\\\\u2605\\\\u2607-\\\\u2612\\\\u2614-\\\\u2685\\\\u2690-\\\\u2705\\\\u2708-\\\\u2712\\\\u2714\\\\u2716\\\\u271D\\\\u2721\\\\u2728\\\\u2733\\\\u2734\\\\u2744\\\\u2747\\\\u274C\\\\u274E\\\\u2753-\\\\u2755\\\\u2757\\\\u2763-\\\\u2767\\\\u2795-\\\\u2797\\\\u27A1\\\\u27B0\\\\u27BF\\\\u2934\\\\u2935\\\\u2B05-\\\\u2B07\\\\u2B1B\\\\u2B1C\\\\u2B50\\\\u2B55\\\\u3030\\\\u303D\\\\u3297\\\\u3299]|\\\\uD83C[\\\\uDC00-\\\\uDCFF\\\\uDD0D-\\\\uDD0F\\\\uDD2F\\\\uDD6C-\\\\uDD71\\\\uDD7E\\\\uDD7F\\\\uDD8E\\\\uDD91-\\\\uDD9A\\\\uDDAD-\\\\uDDE5\\\\uDE01-\\\\uDE0F\\\\uDE1A\\\\uDE2F\\\\uDE32-\\\\uDE3A\\\\uDE3C-\\\\uDE3F\\\\uDE49-\\\\uDFFA]|\\\\uD83D[\\\\uDC00-\\\\uDD3D\\\\uDD46-\\\\uDE4F\\\\uDE80-\\\\uDEFF\\\\uDF74-\\\\uDF7F\\\\uDFD5-\\\\uDFFF]|\\\\uD83E[\\\\uDC0C-\\\\uDC0F\\\\uDC48-\\\\uDC4F\\\\uDC5A-\\\\uDC5F\\\\uDC88-\\\\uDC8F\\\\uDCAE-\\\\uDCFF\\\\uDD0C-\\\\uDD3A\\\\uDD3C-\\\\uDD45\\\\uDD47-\\\\uDEFF]|\\\\uD83F[\\\\uDC00-\\\\uDFFD])\",\n \"$Extend\": \"(?:[\\\\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\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0898-\\\\u089F\\\\u08CA-\\\\u08E1\\\\u08E3-\\\\u0902\\\\u093A\\\\u093C\\\\u0941-\\\\u0948\\\\u094D\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981\\\\u09BC\\\\u09BE\\\\u09C1-\\\\u09C4\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01\\\\u0A02\\\\u0A3C\\\\u0A41\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81\\\\u0A82\\\\u0ABC\\\\u0AC1-\\\\u0AC5\\\\u0AC7\\\\u0AC8\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01\\\\u0B3C\\\\u0B3E\\\\u0B3F\\\\u0B41-\\\\u0B44\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE\\\\u0BC0\\\\u0BCD\\\\u0BD7\\\\u0C00\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C40\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81\\\\u0CBC\\\\u0CBF\\\\u0CC2\\\\u0CC6\\\\u0CCC\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0D00\\\\u0D01\\\\u0D3B\\\\u0D3C\\\\u0D3E\\\\u0D41-\\\\u0D44\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81\\\\u0DCA\\\\u0DCF\\\\u0DD2-\\\\u0DD4\\\\u0DD6\\\\u0DDF\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\u0F18\\\\u0F19\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F71-\\\\u0F7E\\\\u0F80-\\\\u0F84\\\\u0F86\\\\u0F87\\\\u0F8D-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u102D-\\\\u1030\\\\u1032-\\\\u1037\\\\u1039\\\\u103A\\\\u103D\\\\u103E\\\\u1058\\\\u1059\\\\u105E-\\\\u1060\\\\u1071-\\\\u1074\\\\u1082\\\\u1085\\\\u1086\\\\u108D\\\\u109D\\\\u135D-\\\\u135F\\\\u1712-\\\\u1714\\\\u1732\\\\u1733\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4\\\\u17B5\\\\u17B7-\\\\u17BD\\\\u17C6\\\\u17C9-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u1922\\\\u1927\\\\u1928\\\\u1932\\\\u1939-\\\\u193B\\\\u1A17\\\\u1A18\\\\u1A1B\\\\u1A56\\\\u1A58-\\\\u1A5E\\\\u1A60\\\\u1A62\\\\u1A65-\\\\u1A6C\\\\u1A73-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B03\\\\u1B34-\\\\u1B3A\\\\u1B3C\\\\u1B42\\\\u1B6B-\\\\u1B73\\\\u1B80\\\\u1B81\\\\u1BA2-\\\\u1BA5\\\\u1BA8\\\\u1BA9\\\\u1BAB-\\\\u1BAD\\\\u1BE6\\\\u1BE8\\\\u1BE9\\\\u1BED\\\\u1BEF-\\\\u1BF1\\\\u1C2C-\\\\u1C33\\\\u1C36\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE0\\\\u1CE2-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF8\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA825\\\\uA826\\\\uA82C\\\\uA8C4\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\uA926-\\\\uA92D\\\\uA947-\\\\uA951\\\\uA980-\\\\uA982\\\\uA9B3\\\\uA9B6-\\\\uA9B9\\\\uA9BC\\\\uA9BD\\\\uA9E5\\\\uAA29-\\\\uAA2E\\\\uAA31\\\\uAA32\\\\uAA35\\\\uAA36\\\\uAA43\\\\uAA4C\\\\uAA7C\\\\uAAB0\\\\uAAB2-\\\\uAAB4\\\\uAAB7\\\\uAAB8\\\\uAABE\\\\uAABF\\\\uAAC1\\\\uAAEC\\\\uAAED\\\\uAAF6\\\\uABE5\\\\uABE8\\\\uABED\\\\uFB1E\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2F\\\\uFF9E\\\\uFF9F]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC01\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC81\\\\uDCB3-\\\\uDCB6\\\\uDCB9\\\\uDCBA\\\\uDCC2\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD2B\\\\uDD2D-\\\\uDD34\\\\uDD73\\\\uDD80\\\\uDD81\\\\uDDB6-\\\\uDDBE\\\\uDDC9-\\\\uDDCC\\\\uDDCF\\\\uDE2F-\\\\uDE31\\\\uDE34\\\\uDE36\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF\\\\uDEE3-\\\\uDEEA\\\\uDF00\\\\uDF01\\\\uDF3B\\\\uDF3C\\\\uDF3E\\\\uDF40\\\\uDF57\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC38-\\\\uDC3F\\\\uDC42-\\\\uDC44\\\\uDC46\\\\uDC5E\\\\uDCB0\\\\uDCB3-\\\\uDCB8\\\\uDCBA\\\\uDCBD\\\\uDCBF\\\\uDCC0\\\\uDCC2\\\\uDCC3\\\\uDDAF\\\\uDDB2-\\\\uDDB5\\\\uDDBC\\\\uDDBD\\\\uDDBF\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE33-\\\\uDE3A\\\\uDE3D\\\\uDE3F\\\\uDE40\\\\uDEAB\\\\uDEAD\\\\uDEB0-\\\\uDEB5\\\\uDEB7\\\\uDF1D-\\\\uDF1F\\\\uDF22-\\\\uDF25\\\\uDF27-\\\\uDF2B]|\\\\uD806[\\\\uDC2F-\\\\uDC37\\\\uDC39\\\\uDC3A\\\\uDD30\\\\uDD3B\\\\uDD3C\\\\uDD3E\\\\uDD43\\\\uDDD4-\\\\uDDD7\\\\uDDDA\\\\uDDDB\\\\uDDE0\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE38\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE56\\\\uDE59-\\\\uDE5B\\\\uDE8A-\\\\uDE96\\\\uDE98\\\\uDE99]|\\\\uD807[\\\\uDC30-\\\\uDC36\\\\uDC38-\\\\uDC3D\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCAA-\\\\uDCB0\\\\uDCB2\\\\uDCB3\\\\uDCB5\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD90\\\\uDD91\\\\uDD95\\\\uDD97\\\\uDEF3\\\\uDEF4\\\\uDF00\\\\uDF01\\\\uDF36-\\\\uDF3A\\\\uDF40\\\\uDF42]|\\\\uD80D[\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF8F-\\\\uDF92\\\\uDFE4]|\\\\uD82F[\\\\uDC9D\\\\uDC9E]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65\\\\uDD67-\\\\uDD69\\\\uDD6E-\\\\uDD72\\\\uDD7B-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$L\": \"[\\\\u1100-\\\\u115F\\\\uA960-\\\\uA97C]\",\n \"$LF\": \"\\\\n\",\n \"$LV\": \"[\\\\uAC00\\\\uAC1C\\\\uAC38\\\\uAC54\\\\uAC70\\\\uAC8C\\\\uACA8\\\\uACC4\\\\uACE0\\\\uACFC\\\\uAD18\\\\uAD34\\\\uAD50\\\\uAD6C\\\\uAD88\\\\uADA4\\\\uADC0\\\\uADDC\\\\uADF8\\\\uAE14\\\\uAE30\\\\uAE4C\\\\uAE68\\\\uAE84\\\\uAEA0\\\\uAEBC\\\\uAED8\\\\uAEF4\\\\uAF10\\\\uAF2C\\\\uAF48\\\\uAF64\\\\uAF80\\\\uAF9C\\\\uAFB8\\\\uAFD4\\\\uAFF0\\\\uB00C\\\\uB028\\\\uB044\\\\uB060\\\\uB07C\\\\uB098\\\\uB0B4\\\\uB0D0\\\\uB0EC\\\\uB108\\\\uB124\\\\uB140\\\\uB15C\\\\uB178\\\\uB194\\\\uB1B0\\\\uB1CC\\\\uB1E8\\\\uB204\\\\uB220\\\\uB23C\\\\uB258\\\\uB274\\\\uB290\\\\uB2AC\\\\uB2C8\\\\uB2E4\\\\uB300\\\\uB31C\\\\uB338\\\\uB354\\\\uB370\\\\uB38C\\\\uB3A8\\\\uB3C4\\\\uB3E0\\\\uB3FC\\\\uB418\\\\uB434\\\\uB450\\\\uB46C\\\\uB488\\\\uB4A4\\\\uB4C0\\\\uB4DC\\\\uB4F8\\\\uB514\\\\uB530\\\\uB54C\\\\uB568\\\\uB584\\\\uB5A0\\\\uB5BC\\\\uB5D8\\\\uB5F4\\\\uB610\\\\uB62C\\\\uB648\\\\uB664\\\\uB680\\\\uB69C\\\\uB6B8\\\\uB6D4\\\\uB6F0\\\\uB70C\\\\uB728\\\\uB744\\\\uB760\\\\uB77C\\\\uB798\\\\uB7B4\\\\uB7D0\\\\uB7EC\\\\uB808\\\\uB824\\\\uB840\\\\uB85C\\\\uB878\\\\uB894\\\\uB8B0\\\\uB8CC\\\\uB8E8\\\\uB904\\\\uB920\\\\uB93C\\\\uB958\\\\uB974\\\\uB990\\\\uB9AC\\\\uB9C8\\\\uB9E4\\\\uBA00\\\\uBA1C\\\\uBA38\\\\uBA54\\\\uBA70\\\\uBA8C\\\\uBAA8\\\\uBAC4\\\\uBAE0\\\\uBAFC\\\\uBB18\\\\uBB34\\\\uBB50\\\\uBB6C\\\\uBB88\\\\uBBA4\\\\uBBC0\\\\uBBDC\\\\uBBF8\\\\uBC14\\\\uBC30\\\\uBC4C\\\\uBC68\\\\uBC84\\\\uBCA0\\\\uBCBC\\\\uBCD8\\\\uBCF4\\\\uBD10\\\\uBD2C\\\\uBD48\\\\uBD64\\\\uBD80\\\\uBD9C\\\\uBDB8\\\\uBDD4\\\\uBDF0\\\\uBE0C\\\\uBE28\\\\uBE44\\\\uBE60\\\\uBE7C\\\\uBE98\\\\uBEB4\\\\uBED0\\\\uBEEC\\\\uBF08\\\\uBF24\\\\uBF40\\\\uBF5C\\\\uBF78\\\\uBF94\\\\uBFB0\\\\uBFCC\\\\uBFE8\\\\uC004\\\\uC020\\\\uC03C\\\\uC058\\\\uC074\\\\uC090\\\\uC0AC\\\\uC0C8\\\\uC0E4\\\\uC100\\\\uC11C\\\\uC138\\\\uC154\\\\uC170\\\\uC18C\\\\uC1A8\\\\uC1C4\\\\uC1E0\\\\uC1FC\\\\uC218\\\\uC234\\\\uC250\\\\uC26C\\\\uC288\\\\uC2A4\\\\uC2C0\\\\uC2DC\\\\uC2F8\\\\uC314\\\\uC330\\\\uC34C\\\\uC368\\\\uC384\\\\uC3A0\\\\uC3BC\\\\uC3D8\\\\uC3F4\\\\uC410\\\\uC42C\\\\uC448\\\\uC464\\\\uC480\\\\uC49C\\\\uC4B8\\\\uC4D4\\\\uC4F0\\\\uC50C\\\\uC528\\\\uC544\\\\uC560\\\\uC57C\\\\uC598\\\\uC5B4\\\\uC5D0\\\\uC5EC\\\\uC608\\\\uC624\\\\uC640\\\\uC65C\\\\uC678\\\\uC694\\\\uC6B0\\\\uC6CC\\\\uC6E8\\\\uC704\\\\uC720\\\\uC73C\\\\uC758\\\\uC774\\\\uC790\\\\uC7AC\\\\uC7C8\\\\uC7E4\\\\uC800\\\\uC81C\\\\uC838\\\\uC854\\\\uC870\\\\uC88C\\\\uC8A8\\\\uC8C4\\\\uC8E0\\\\uC8FC\\\\uC918\\\\uC934\\\\uC950\\\\uC96C\\\\uC988\\\\uC9A4\\\\uC9C0\\\\uC9DC\\\\uC9F8\\\\uCA14\\\\uCA30\\\\uCA4C\\\\uCA68\\\\uCA84\\\\uCAA0\\\\uCABC\\\\uCAD8\\\\uCAF4\\\\uCB10\\\\uCB2C\\\\uCB48\\\\uCB64\\\\uCB80\\\\uCB9C\\\\uCBB8\\\\uCBD4\\\\uCBF0\\\\uCC0C\\\\uCC28\\\\uCC44\\\\uCC60\\\\uCC7C\\\\uCC98\\\\uCCB4\\\\uCCD0\\\\uCCEC\\\\uCD08\\\\uCD24\\\\uCD40\\\\uCD5C\\\\uCD78\\\\uCD94\\\\uCDB0\\\\uCDCC\\\\uCDE8\\\\uCE04\\\\uCE20\\\\uCE3C\\\\uCE58\\\\uCE74\\\\uCE90\\\\uCEAC\\\\uCEC8\\\\uCEE4\\\\uCF00\\\\uCF1C\\\\uCF38\\\\uCF54\\\\uCF70\\\\uCF8C\\\\uCFA8\\\\uCFC4\\\\uCFE0\\\\uCFFC\\\\uD018\\\\uD034\\\\uD050\\\\uD06C\\\\uD088\\\\uD0A4\\\\uD0C0\\\\uD0DC\\\\uD0F8\\\\uD114\\\\uD130\\\\uD14C\\\\uD168\\\\uD184\\\\uD1A0\\\\uD1BC\\\\uD1D8\\\\uD1F4\\\\uD210\\\\uD22C\\\\uD248\\\\uD264\\\\uD280\\\\uD29C\\\\uD2B8\\\\uD2D4\\\\uD2F0\\\\uD30C\\\\uD328\\\\uD344\\\\uD360\\\\uD37C\\\\uD398\\\\uD3B4\\\\uD3D0\\\\uD3EC\\\\uD408\\\\uD424\\\\uD440\\\\uD45C\\\\uD478\\\\uD494\\\\uD4B0\\\\uD4CC\\\\uD4E8\\\\uD504\\\\uD520\\\\uD53C\\\\uD558\\\\uD574\\\\uD590\\\\uD5AC\\\\uD5C8\\\\uD5E4\\\\uD600\\\\uD61C\\\\uD638\\\\uD654\\\\uD670\\\\uD68C\\\\uD6A8\\\\uD6C4\\\\uD6E0\\\\uD6FC\\\\uD718\\\\uD734\\\\uD750\\\\uD76C\\\\uD788]\",\n \"$LVT\": \"[\\\\uAC01-\\\\uAC1B\\\\uAC1D-\\\\uAC37\\\\uAC39-\\\\uAC53\\\\uAC55-\\\\uAC6F\\\\uAC71-\\\\uAC8B\\\\uAC8D-\\\\uACA7\\\\uACA9-\\\\uACC3\\\\uACC5-\\\\uACDF\\\\uACE1-\\\\uACFB\\\\uACFD-\\\\uAD17\\\\uAD19-\\\\uAD33\\\\uAD35-\\\\uAD4F\\\\uAD51-\\\\uAD6B\\\\uAD6D-\\\\uAD87\\\\uAD89-\\\\uADA3\\\\uADA5-\\\\uADBF\\\\uADC1-\\\\uADDB\\\\uADDD-\\\\uADF7\\\\uADF9-\\\\uAE13\\\\uAE15-\\\\uAE2F\\\\uAE31-\\\\uAE4B\\\\uAE4D-\\\\uAE67\\\\uAE69-\\\\uAE83\\\\uAE85-\\\\uAE9F\\\\uAEA1-\\\\uAEBB\\\\uAEBD-\\\\uAED7\\\\uAED9-\\\\uAEF3\\\\uAEF5-\\\\uAF0F\\\\uAF11-\\\\uAF2B\\\\uAF2D-\\\\uAF47\\\\uAF49-\\\\uAF63\\\\uAF65-\\\\uAF7F\\\\uAF81-\\\\uAF9B\\\\uAF9D-\\\\uAFB7\\\\uAFB9-\\\\uAFD3\\\\uAFD5-\\\\uAFEF\\\\uAFF1-\\\\uB00B\\\\uB00D-\\\\uB027\\\\uB029-\\\\uB043\\\\uB045-\\\\uB05F\\\\uB061-\\\\uB07B\\\\uB07D-\\\\uB097\\\\uB099-\\\\uB0B3\\\\uB0B5-\\\\uB0CF\\\\uB0D1-\\\\uB0EB\\\\uB0ED-\\\\uB107\\\\uB109-\\\\uB123\\\\uB125-\\\\uB13F\\\\uB141-\\\\uB15B\\\\uB15D-\\\\uB177\\\\uB179-\\\\uB193\\\\uB195-\\\\uB1AF\\\\uB1B1-\\\\uB1CB\\\\uB1CD-\\\\uB1E7\\\\uB1E9-\\\\uB203\\\\uB205-\\\\uB21F\\\\uB221-\\\\uB23B\\\\uB23D-\\\\uB257\\\\uB259-\\\\uB273\\\\uB275-\\\\uB28F\\\\uB291-\\\\uB2AB\\\\uB2AD-\\\\uB2C7\\\\uB2C9-\\\\uB2E3\\\\uB2E5-\\\\uB2FF\\\\uB301-\\\\uB31B\\\\uB31D-\\\\uB337\\\\uB339-\\\\uB353\\\\uB355-\\\\uB36F\\\\uB371-\\\\uB38B\\\\uB38D-\\\\uB3A7\\\\uB3A9-\\\\uB3C3\\\\uB3C5-\\\\uB3DF\\\\uB3E1-\\\\uB3FB\\\\uB3FD-\\\\uB417\\\\uB419-\\\\uB433\\\\uB435-\\\\uB44F\\\\uB451-\\\\uB46B\\\\uB46D-\\\\uB487\\\\uB489-\\\\uB4A3\\\\uB4A5-\\\\uB4BF\\\\uB4C1-\\\\uB4DB\\\\uB4DD-\\\\uB4F7\\\\uB4F9-\\\\uB513\\\\uB515-\\\\uB52F\\\\uB531-\\\\uB54B\\\\uB54D-\\\\uB567\\\\uB569-\\\\uB583\\\\uB585-\\\\uB59F\\\\uB5A1-\\\\uB5BB\\\\uB5BD-\\\\uB5D7\\\\uB5D9-\\\\uB5F3\\\\uB5F5-\\\\uB60F\\\\uB611-\\\\uB62B\\\\uB62D-\\\\uB647\\\\uB649-\\\\uB663\\\\uB665-\\\\uB67F\\\\uB681-\\\\uB69B\\\\uB69D-\\\\uB6B7\\\\uB6B9-\\\\uB6D3\\\\uB6D5-\\\\uB6EF\\\\uB6F1-\\\\uB70B\\\\uB70D-\\\\uB727\\\\uB729-\\\\uB743\\\\uB745-\\\\uB75F\\\\uB761-\\\\uB77B\\\\uB77D-\\\\uB797\\\\uB799-\\\\uB7B3\\\\uB7B5-\\\\uB7CF\\\\uB7D1-\\\\uB7EB\\\\uB7ED-\\\\uB807\\\\uB809-\\\\uB823\\\\uB825-\\\\uB83F\\\\uB841-\\\\uB85B\\\\uB85D-\\\\uB877\\\\uB879-\\\\uB893\\\\uB895-\\\\uB8AF\\\\uB8B1-\\\\uB8CB\\\\uB8CD-\\\\uB8E7\\\\uB8E9-\\\\uB903\\\\uB905-\\\\uB91F\\\\uB921-\\\\uB93B\\\\uB93D-\\\\uB957\\\\uB959-\\\\uB973\\\\uB975-\\\\uB98F\\\\uB991-\\\\uB9AB\\\\uB9AD-\\\\uB9C7\\\\uB9C9-\\\\uB9E3\\\\uB9E5-\\\\uB9FF\\\\uBA01-\\\\uBA1B\\\\uBA1D-\\\\uBA37\\\\uBA39-\\\\uBA53\\\\uBA55-\\\\uBA6F\\\\uBA71-\\\\uBA8B\\\\uBA8D-\\\\uBAA7\\\\uBAA9-\\\\uBAC3\\\\uBAC5-\\\\uBADF\\\\uBAE1-\\\\uBAFB\\\\uBAFD-\\\\uBB17\\\\uBB19-\\\\uBB33\\\\uBB35-\\\\uBB4F\\\\uBB51-\\\\uBB6B\\\\uBB6D-\\\\uBB87\\\\uBB89-\\\\uBBA3\\\\uBBA5-\\\\uBBBF\\\\uBBC1-\\\\uBBDB\\\\uBBDD-\\\\uBBF7\\\\uBBF9-\\\\uBC13\\\\uBC15-\\\\uBC2F\\\\uBC31-\\\\uBC4B\\\\uBC4D-\\\\uBC67\\\\uBC69-\\\\uBC83\\\\uBC85-\\\\uBC9F\\\\uBCA1-\\\\uBCBB\\\\uBCBD-\\\\uBCD7\\\\uBCD9-\\\\uBCF3\\\\uBCF5-\\\\uBD0F\\\\uBD11-\\\\uBD2B\\\\uBD2D-\\\\uBD47\\\\uBD49-\\\\uBD63\\\\uBD65-\\\\uBD7F\\\\uBD81-\\\\uBD9B\\\\uBD9D-\\\\uBDB7\\\\uBDB9-\\\\uBDD3\\\\uBDD5-\\\\uBDEF\\\\uBDF1-\\\\uBE0B\\\\uBE0D-\\\\uBE27\\\\uBE29-\\\\uBE43\\\\uBE45-\\\\uBE5F\\\\uBE61-\\\\uBE7B\\\\uBE7D-\\\\uBE97\\\\uBE99-\\\\uBEB3\\\\uBEB5-\\\\uBECF\\\\uBED1-\\\\uBEEB\\\\uBEED-\\\\uBF07\\\\uBF09-\\\\uBF23\\\\uBF25-\\\\uBF3F\\\\uBF41-\\\\uBF5B\\\\uBF5D-\\\\uBF77\\\\uBF79-\\\\uBF93\\\\uBF95-\\\\uBFAF\\\\uBFB1-\\\\uBFCB\\\\uBFCD-\\\\uBFE7\\\\uBFE9-\\\\uC003\\\\uC005-\\\\uC01F\\\\uC021-\\\\uC03B\\\\uC03D-\\\\uC057\\\\uC059-\\\\uC073\\\\uC075-\\\\uC08F\\\\uC091-\\\\uC0AB\\\\uC0AD-\\\\uC0C7\\\\uC0C9-\\\\uC0E3\\\\uC0E5-\\\\uC0FF\\\\uC101-\\\\uC11B\\\\uC11D-\\\\uC137\\\\uC139-\\\\uC153\\\\uC155-\\\\uC16F\\\\uC171-\\\\uC18B\\\\uC18D-\\\\uC1A7\\\\uC1A9-\\\\uC1C3\\\\uC1C5-\\\\uC1DF\\\\uC1E1-\\\\uC1FB\\\\uC1FD-\\\\uC217\\\\uC219-\\\\uC233\\\\uC235-\\\\uC24F\\\\uC251-\\\\uC26B\\\\uC26D-\\\\uC287\\\\uC289-\\\\uC2A3\\\\uC2A5-\\\\uC2BF\\\\uC2C1-\\\\uC2DB\\\\uC2DD-\\\\uC2F7\\\\uC2F9-\\\\uC313\\\\uC315-\\\\uC32F\\\\uC331-\\\\uC34B\\\\uC34D-\\\\uC367\\\\uC369-\\\\uC383\\\\uC385-\\\\uC39F\\\\uC3A1-\\\\uC3BB\\\\uC3BD-\\\\uC3D7\\\\uC3D9-\\\\uC3F3\\\\uC3F5-\\\\uC40F\\\\uC411-\\\\uC42B\\\\uC42D-\\\\uC447\\\\uC449-\\\\uC463\\\\uC465-\\\\uC47F\\\\uC481-\\\\uC49B\\\\uC49D-\\\\uC4B7\\\\uC4B9-\\\\uC4D3\\\\uC4D5-\\\\uC4EF\\\\uC4F1-\\\\uC50B\\\\uC50D-\\\\uC527\\\\uC529-\\\\uC543\\\\uC545-\\\\uC55F\\\\uC561-\\\\uC57B\\\\uC57D-\\\\uC597\\\\uC599-\\\\uC5B3\\\\uC5B5-\\\\uC5CF\\\\uC5D1-\\\\uC5EB\\\\uC5ED-\\\\uC607\\\\uC609-\\\\uC623\\\\uC625-\\\\uC63F\\\\uC641-\\\\uC65B\\\\uC65D-\\\\uC677\\\\uC679-\\\\uC693\\\\uC695-\\\\uC6AF\\\\uC6B1-\\\\uC6CB\\\\uC6CD-\\\\uC6E7\\\\uC6E9-\\\\uC703\\\\uC705-\\\\uC71F\\\\uC721-\\\\uC73B\\\\uC73D-\\\\uC757\\\\uC759-\\\\uC773\\\\uC775-\\\\uC78F\\\\uC791-\\\\uC7AB\\\\uC7AD-\\\\uC7C7\\\\uC7C9-\\\\uC7E3\\\\uC7E5-\\\\uC7FF\\\\uC801-\\\\uC81B\\\\uC81D-\\\\uC837\\\\uC839-\\\\uC853\\\\uC855-\\\\uC86F\\\\uC871-\\\\uC88B\\\\uC88D-\\\\uC8A7\\\\uC8A9-\\\\uC8C3\\\\uC8C5-\\\\uC8DF\\\\uC8E1-\\\\uC8FB\\\\uC8FD-\\\\uC917\\\\uC919-\\\\uC933\\\\uC935-\\\\uC94F\\\\uC951-\\\\uC96B\\\\uC96D-\\\\uC987\\\\uC989-\\\\uC9A3\\\\uC9A5-\\\\uC9BF\\\\uC9C1-\\\\uC9DB\\\\uC9DD-\\\\uC9F7\\\\uC9F9-\\\\uCA13\\\\uCA15-\\\\uCA2F\\\\uCA31-\\\\uCA4B\\\\uCA4D-\\\\uCA67\\\\uCA69-\\\\uCA83\\\\uCA85-\\\\uCA9F\\\\uCAA1-\\\\uCABB\\\\uCABD-\\\\uCAD7\\\\uCAD9-\\\\uCAF3\\\\uCAF5-\\\\uCB0F\\\\uCB11-\\\\uCB2B\\\\uCB2D-\\\\uCB47\\\\uCB49-\\\\uCB63\\\\uCB65-\\\\uCB7F\\\\uCB81-\\\\uCB9B\\\\uCB9D-\\\\uCBB7\\\\uCBB9-\\\\uCBD3\\\\uCBD5-\\\\uCBEF\\\\uCBF1-\\\\uCC0B\\\\uCC0D-\\\\uCC27\\\\uCC29-\\\\uCC43\\\\uCC45-\\\\uCC5F\\\\uCC61-\\\\uCC7B\\\\uCC7D-\\\\uCC97\\\\uCC99-\\\\uCCB3\\\\uCCB5-\\\\uCCCF\\\\uCCD1-\\\\uCCEB\\\\uCCED-\\\\uCD07\\\\uCD09-\\\\uCD23\\\\uCD25-\\\\uCD3F\\\\uCD41-\\\\uCD5B\\\\uCD5D-\\\\uCD77\\\\uCD79-\\\\uCD93\\\\uCD95-\\\\uCDAF\\\\uCDB1-\\\\uCDCB\\\\uCDCD-\\\\uCDE7\\\\uCDE9-\\\\uCE03\\\\uCE05-\\\\uCE1F\\\\uCE21-\\\\uCE3B\\\\uCE3D-\\\\uCE57\\\\uCE59-\\\\uCE73\\\\uCE75-\\\\uCE8F\\\\uCE91-\\\\uCEAB\\\\uCEAD-\\\\uCEC7\\\\uCEC9-\\\\uCEE3\\\\uCEE5-\\\\uCEFF\\\\uCF01-\\\\uCF1B\\\\uCF1D-\\\\uCF37\\\\uCF39-\\\\uCF53\\\\uCF55-\\\\uCF6F\\\\uCF71-\\\\uCF8B\\\\uCF8D-\\\\uCFA7\\\\uCFA9-\\\\uCFC3\\\\uCFC5-\\\\uCFDF\\\\uCFE1-\\\\uCFFB\\\\uCFFD-\\\\uD017\\\\uD019-\\\\uD033\\\\uD035-\\\\uD04F\\\\uD051-\\\\uD06B\\\\uD06D-\\\\uD087\\\\uD089-\\\\uD0A3\\\\uD0A5-\\\\uD0BF\\\\uD0C1-\\\\uD0DB\\\\uD0DD-\\\\uD0F7\\\\uD0F9-\\\\uD113\\\\uD115-\\\\uD12F\\\\uD131-\\\\uD14B\\\\uD14D-\\\\uD167\\\\uD169-\\\\uD183\\\\uD185-\\\\uD19F\\\\uD1A1-\\\\uD1BB\\\\uD1BD-\\\\uD1D7\\\\uD1D9-\\\\uD1F3\\\\uD1F5-\\\\uD20F\\\\uD211-\\\\uD22B\\\\uD22D-\\\\uD247\\\\uD249-\\\\uD263\\\\uD265-\\\\uD27F\\\\uD281-\\\\uD29B\\\\uD29D-\\\\uD2B7\\\\uD2B9-\\\\uD2D3\\\\uD2D5-\\\\uD2EF\\\\uD2F1-\\\\uD30B\\\\uD30D-\\\\uD327\\\\uD329-\\\\uD343\\\\uD345-\\\\uD35F\\\\uD361-\\\\uD37B\\\\uD37D-\\\\uD397\\\\uD399-\\\\uD3B3\\\\uD3B5-\\\\uD3CF\\\\uD3D1-\\\\uD3EB\\\\uD3ED-\\\\uD407\\\\uD409-\\\\uD423\\\\uD425-\\\\uD43F\\\\uD441-\\\\uD45B\\\\uD45D-\\\\uD477\\\\uD479-\\\\uD493\\\\uD495-\\\\uD4AF\\\\uD4B1-\\\\uD4CB\\\\uD4CD-\\\\uD4E7\\\\uD4E9-\\\\uD503\\\\uD505-\\\\uD51F\\\\uD521-\\\\uD53B\\\\uD53D-\\\\uD557\\\\uD559-\\\\uD573\\\\uD575-\\\\uD58F\\\\uD591-\\\\uD5AB\\\\uD5AD-\\\\uD5C7\\\\uD5C9-\\\\uD5E3\\\\uD5E5-\\\\uD5FF\\\\uD601-\\\\uD61B\\\\uD61D-\\\\uD637\\\\uD639-\\\\uD653\\\\uD655-\\\\uD66F\\\\uD671-\\\\uD68B\\\\uD68D-\\\\uD6A7\\\\uD6A9-\\\\uD6C3\\\\uD6C5-\\\\uD6DF\\\\uD6E1-\\\\uD6FB\\\\uD6FD-\\\\uD717\\\\uD719-\\\\uD733\\\\uD735-\\\\uD74F\\\\uD751-\\\\uD76B\\\\uD76D-\\\\uD787\\\\uD789-\\\\uD7A3]\",\n \"$LinkingConsonant\": \"[\\\\u0915-\\\\u0939\\\\u0958-\\\\u095F\\\\u0978-\\\\u097F\\\\u0995-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09DC\\\\u09DD\\\\u09DF\\\\u09F0\\\\u09F1\\\\u0A95-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0AF9\\\\u0B15-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B5C\\\\u0B5D\\\\u0B5F\\\\u0B71\\\\u0C15-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C58-\\\\u0C5A\\\\u0D15-\\\\u0D3A]\",\n \"$Prepend\": \"(?:[\\\\u0600-\\\\u0605\\\\u06DD\\\\u070F\\\\u0890\\\\u0891\\\\u08E2\\\\u0D4E]|\\\\uD804[\\\\uDCBD\\\\uDCCD\\\\uDDC2\\\\uDDC3]|\\\\uD806[\\\\uDD3F\\\\uDD41\\\\uDE3A\\\\uDE84-\\\\uDE89]|\\\\uD807[\\\\uDD46\\\\uDF02])\",\n \"$RI\": \"(?:\\\\uD83C[\\\\uDDE6-\\\\uDDFF])\",\n \"$SpacingMark\": \"(?:[\\\\u0903\\\\u093B\\\\u093E-\\\\u0940\\\\u0949-\\\\u094C\\\\u094E\\\\u094F\\\\u0982\\\\u0983\\\\u09BF\\\\u09C0\\\\u09C7\\\\u09C8\\\\u09CB\\\\u09CC\\\\u0A03\\\\u0A3E-\\\\u0A40\\\\u0A83\\\\u0ABE-\\\\u0AC0\\\\u0AC9\\\\u0ACB\\\\u0ACC\\\\u0B02\\\\u0B03\\\\u0B40\\\\u0B47\\\\u0B48\\\\u0B4B\\\\u0B4C\\\\u0BBF\\\\u0BC1\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCC\\\\u0C01-\\\\u0C03\\\\u0C41-\\\\u0C44\\\\u0C82\\\\u0C83\\\\u0CBE\\\\u0CC0\\\\u0CC1\\\\u0CC3\\\\u0CC4\\\\u0CC7\\\\u0CC8\\\\u0CCA\\\\u0CCB\\\\u0CF3\\\\u0D02\\\\u0D03\\\\u0D3F\\\\u0D40\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4C\\\\u0D82\\\\u0D83\\\\u0DD0\\\\u0DD1\\\\u0DD8-\\\\u0DDE\\\\u0DF2\\\\u0DF3\\\\u0E33\\\\u0EB3\\\\u0F3E\\\\u0F3F\\\\u0F7F\\\\u1031\\\\u103B\\\\u103C\\\\u1056\\\\u1057\\\\u1084\\\\u1715\\\\u1734\\\\u17B6\\\\u17BE-\\\\u17C5\\\\u17C7\\\\u17C8\\\\u1923-\\\\u1926\\\\u1929-\\\\u192B\\\\u1930\\\\u1931\\\\u1933-\\\\u1938\\\\u1A19\\\\u1A1A\\\\u1A55\\\\u1A57\\\\u1A6D-\\\\u1A72\\\\u1B04\\\\u1B3B\\\\u1B3D-\\\\u1B41\\\\u1B43\\\\u1B44\\\\u1B82\\\\u1BA1\\\\u1BA6\\\\u1BA7\\\\u1BAA\\\\u1BE7\\\\u1BEA-\\\\u1BEC\\\\u1BEE\\\\u1BF2\\\\u1BF3\\\\u1C24-\\\\u1C2B\\\\u1C34\\\\u1C35\\\\u1CE1\\\\u1CF7\\\\uA823\\\\uA824\\\\uA827\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C3\\\\uA952\\\\uA953\\\\uA983\\\\uA9B4\\\\uA9B5\\\\uA9BA\\\\uA9BB\\\\uA9BE-\\\\uA9C0\\\\uAA2F\\\\uAA30\\\\uAA33\\\\uAA34\\\\uAA4D\\\\uAAEB\\\\uAAEE\\\\uAAEF\\\\uAAF5\\\\uABE3\\\\uABE4\\\\uABE6\\\\uABE7\\\\uABE9\\\\uABEA\\\\uABEC]|\\\\uD804[\\\\uDC00\\\\uDC02\\\\uDC82\\\\uDCB0-\\\\uDCB2\\\\uDCB7\\\\uDCB8\\\\uDD2C\\\\uDD45\\\\uDD46\\\\uDD82\\\\uDDB3-\\\\uDDB5\\\\uDDBF\\\\uDDC0\\\\uDDCE\\\\uDE2C-\\\\uDE2E\\\\uDE32\\\\uDE33\\\\uDE35\\\\uDEE0-\\\\uDEE2\\\\uDF02\\\\uDF03\\\\uDF3F\\\\uDF41-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF62\\\\uDF63]|\\\\uD805[\\\\uDC35-\\\\uDC37\\\\uDC40\\\\uDC41\\\\uDC45\\\\uDCB1\\\\uDCB2\\\\uDCB9\\\\uDCBB\\\\uDCBC\\\\uDCBE\\\\uDCC1\\\\uDDB0\\\\uDDB1\\\\uDDB8-\\\\uDDBB\\\\uDDBE\\\\uDE30-\\\\uDE32\\\\uDE3B\\\\uDE3C\\\\uDE3E\\\\uDEAC\\\\uDEAE\\\\uDEAF\\\\uDEB6\\\\uDF26]|\\\\uD806[\\\\uDC2C-\\\\uDC2E\\\\uDC38\\\\uDD31-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3D\\\\uDD40\\\\uDD42\\\\uDDD1-\\\\uDDD3\\\\uDDDC-\\\\uDDDF\\\\uDDE4\\\\uDE39\\\\uDE57\\\\uDE58\\\\uDE97]|\\\\uD807[\\\\uDC2F\\\\uDC3E\\\\uDCA9\\\\uDCB1\\\\uDCB4\\\\uDD8A-\\\\uDD8E\\\\uDD93\\\\uDD94\\\\uDD96\\\\uDEF5\\\\uDEF6\\\\uDF03\\\\uDF34\\\\uDF35\\\\uDF3E\\\\uDF3F\\\\uDF41]|\\\\uD81B[\\\\uDF51-\\\\uDF87\\\\uDFF0\\\\uDFF1]|\\\\uD834[\\\\uDD66\\\\uDD6D])\",\n \"$T\": \"[\\\\u11A8-\\\\u11FF\\\\uD7CB-\\\\uD7FB]\",\n \"$V\": \"[\\\\u1160-\\\\u11A7\\\\uD7B0-\\\\uD7C6]\",\n \"$Virama\": \"[\\\\u094D\\\\u09CD\\\\u0ACD\\\\u0B4D\\\\u0C4D\\\\u0D4D]\",\n \"$ZWJ\": \"\\\\u200D\"\n }\n },\n \"sentence\": {\n \"segmentRules\": {\n \"10\": {\n \"after\": \"($Sp|$ParaSep)\",\n \"before\": \"$SATerm$Close*$Sp*\",\n \"breaks\": false\n },\n \"11\": {\n \"before\": \"$SATerm$Close*$Sp*$ParaSep?\",\n \"breaks\": true\n },\n \"3\": {\n \"after\": \"$LF\",\n \"before\": \"$CR\",\n \"breaks\": false\n },\n \"4\": {\n \"before\": \"$ParaSep\",\n \"breaks\": true\n },\n \"5\": {\n \"after\": \"(?:$Format|$Extend)\",\n \"breaks\": false\n },\n \"6\": {\n \"after\": \"$Numeric\",\n \"before\": \"$ATerm\",\n \"breaks\": false\n },\n \"7\": {\n \"after\": \"$Upper\",\n \"before\": \"($Upper|$Lower)$ATerm\",\n \"breaks\": false\n },\n \"8\": {\n \"after\": \"$NotPreLower_*$Lower\",\n \"before\": \"$ATerm$Close*$Sp*\",\n \"breaks\": false\n },\n \"8.1\": {\n \"after\": \"($SContinue|$SATerm)\",\n \"before\": \"$SATerm$Close*$Sp*\",\n \"breaks\": false\n },\n \"9\": {\n \"after\": \"($Close|$Sp|$ParaSep)\",\n \"before\": \"$SATerm$Close*\",\n \"breaks\": false\n },\n \"998\": {\n \"after\": \"$Any\",\n \"breaks\": false\n }\n },\n \"suppressions\": [],\n \"variables\": {\n \"$ATerm\": \"([\\\\.\\\\u2024\\\\uFE52\\\\uFF0E](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Any\": \"(?:[\\\\0-\\\\uD7FF\\\\uE000-\\\\uFFFF]|[\\\\uD800-\\\\uDBFF][\\\\uDC00-\\\\uDFFF]|[\\\\uD800-\\\\uDBFF](?![\\\\uDC00-\\\\uDFFF])|(?:[^\\\\uD800-\\\\uDBFF]|^)[\\\\uDC00-\\\\uDFFF])\",\n \"$CR\": \"\\\\r\",\n \"$Close\": \"((?:[\\\"'-\\\\)\\\\[\\\\]\\\\{\\\\}\\\\xAB\\\\xBB\\\\u0F3A-\\\\u0F3D\\\\u169B\\\\u169C\\\\u2018-\\\\u201F\\\\u2039\\\\u203A\\\\u2045\\\\u2046\\\\u207D\\\\u207E\\\\u208D\\\\u208E\\\\u2308-\\\\u230B\\\\u2329\\\\u232A\\\\u275B-\\\\u2760\\\\u2768-\\\\u2775\\\\u27C5\\\\u27C6\\\\u27E6-\\\\u27EF\\\\u2983-\\\\u2998\\\\u29D8-\\\\u29DB\\\\u29FC\\\\u29FD\\\\u2E00-\\\\u2E0D\\\\u2E1C\\\\u2E1D\\\\u2E20-\\\\u2E29\\\\u2E42\\\\u2E55-\\\\u2E5C\\\\u3008-\\\\u3011\\\\u3014-\\\\u301B\\\\u301D-\\\\u301F\\\\uFD3E\\\\uFD3F\\\\uFE17\\\\uFE18\\\\uFE35-\\\\uFE44\\\\uFE47\\\\uFE48\\\\uFE59-\\\\uFE5E\\\\uFF08\\\\uFF09\\\\uFF3B\\\\uFF3D\\\\uFF5B\\\\uFF5D\\\\uFF5F\\\\uFF60\\\\uFF62\\\\uFF63]|\\\\uD83D[\\\\uDE76-\\\\uDE78])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Extend\": \"(?:[\\\\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\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0898-\\\\u089F\\\\u08CA-\\\\u08E1\\\\u08E3-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C\\\\u200D\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFF9E\\\\uFF9F]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCC2\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD72\\\\uDD7B-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$FE\": \"(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$Format\": \"(?:[\\\\xAD\\\\u0600-\\\\u0605\\\\u061C\\\\u06DD\\\\u070F\\\\u0890\\\\u0891\\\\u08E2\\\\u180E\\\\u200B\\\\u200E\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\uFEFF\\\\uFFF9-\\\\uFFFB]|\\\\uD804[\\\\uDCBD\\\\uDCCD]|\\\\uD80D[\\\\uDC30-\\\\uDC3F]|\\\\uD82F[\\\\uDCA0-\\\\uDCA3]|\\\\uD834[\\\\uDD73-\\\\uDD7A]|\\\\uDB40\\\\uDC01)\",\n \"$LF\": \"\\\\n\",\n \"$Lower\": \"((?:[a-z\\\\xAA\\\\xB5\\\\xBA\\\\xDF-\\\\xF6\\\\xF8-\\\\xFF\\\\u0101\\\\u0103\\\\u0105\\\\u0107\\\\u0109\\\\u010B\\\\u010D\\\\u010F\\\\u0111\\\\u0113\\\\u0115\\\\u0117\\\\u0119\\\\u011B\\\\u011D\\\\u011F\\\\u0121\\\\u0123\\\\u0125\\\\u0127\\\\u0129\\\\u012B\\\\u012D\\\\u012F\\\\u0131\\\\u0133\\\\u0135\\\\u0137\\\\u0138\\\\u013A\\\\u013C\\\\u013E\\\\u0140\\\\u0142\\\\u0144\\\\u0146\\\\u0148\\\\u0149\\\\u014B\\\\u014D\\\\u014F\\\\u0151\\\\u0153\\\\u0155\\\\u0157\\\\u0159\\\\u015B\\\\u015D\\\\u015F\\\\u0161\\\\u0163\\\\u0165\\\\u0167\\\\u0169\\\\u016B\\\\u016D\\\\u016F\\\\u0171\\\\u0173\\\\u0175\\\\u0177\\\\u017A\\\\u017C\\\\u017E-\\\\u0180\\\\u0183\\\\u0185\\\\u0188\\\\u018C\\\\u018D\\\\u0192\\\\u0195\\\\u0199-\\\\u019B\\\\u019E\\\\u01A1\\\\u01A3\\\\u01A5\\\\u01A8\\\\u01AA\\\\u01AB\\\\u01AD\\\\u01B0\\\\u01B4\\\\u01B6\\\\u01B9\\\\u01BA\\\\u01BD-\\\\u01BF\\\\u01C6\\\\u01C9\\\\u01CC\\\\u01CE\\\\u01D0\\\\u01D2\\\\u01D4\\\\u01D6\\\\u01D8\\\\u01DA\\\\u01DC\\\\u01DD\\\\u01DF\\\\u01E1\\\\u01E3\\\\u01E5\\\\u01E7\\\\u01E9\\\\u01EB\\\\u01ED\\\\u01EF\\\\u01F0\\\\u01F3\\\\u01F5\\\\u01F9\\\\u01FB\\\\u01FD\\\\u01FF\\\\u0201\\\\u0203\\\\u0205\\\\u0207\\\\u0209\\\\u020B\\\\u020D\\\\u020F\\\\u0211\\\\u0213\\\\u0215\\\\u0217\\\\u0219\\\\u021B\\\\u021D\\\\u021F\\\\u0221\\\\u0223\\\\u0225\\\\u0227\\\\u0229\\\\u022B\\\\u022D\\\\u022F\\\\u0231\\\\u0233-\\\\u0239\\\\u023C\\\\u023F\\\\u0240\\\\u0242\\\\u0247\\\\u0249\\\\u024B\\\\u024D\\\\u024F-\\\\u0293\\\\u0295-\\\\u02B8\\\\u02C0\\\\u02C1\\\\u02E0-\\\\u02E4\\\\u0371\\\\u0373\\\\u0377\\\\u037A-\\\\u037D\\\\u0390\\\\u03AC-\\\\u03CE\\\\u03D0\\\\u03D1\\\\u03D5-\\\\u03D7\\\\u03D9\\\\u03DB\\\\u03DD\\\\u03DF\\\\u03E1\\\\u03E3\\\\u03E5\\\\u03E7\\\\u03E9\\\\u03EB\\\\u03ED\\\\u03EF-\\\\u03F3\\\\u03F5\\\\u03F8\\\\u03FB\\\\u03FC\\\\u0430-\\\\u045F\\\\u0461\\\\u0463\\\\u0465\\\\u0467\\\\u0469\\\\u046B\\\\u046D\\\\u046F\\\\u0471\\\\u0473\\\\u0475\\\\u0477\\\\u0479\\\\u047B\\\\u047D\\\\u047F\\\\u0481\\\\u048B\\\\u048D\\\\u048F\\\\u0491\\\\u0493\\\\u0495\\\\u0497\\\\u0499\\\\u049B\\\\u049D\\\\u049F\\\\u04A1\\\\u04A3\\\\u04A5\\\\u04A7\\\\u04A9\\\\u04AB\\\\u04AD\\\\u04AF\\\\u04B1\\\\u04B3\\\\u04B5\\\\u04B7\\\\u04B9\\\\u04BB\\\\u04BD\\\\u04BF\\\\u04C2\\\\u04C4\\\\u04C6\\\\u04C8\\\\u04CA\\\\u04CC\\\\u04CE\\\\u04CF\\\\u04D1\\\\u04D3\\\\u04D5\\\\u04D7\\\\u04D9\\\\u04DB\\\\u04DD\\\\u04DF\\\\u04E1\\\\u04E3\\\\u04E5\\\\u04E7\\\\u04E9\\\\u04EB\\\\u04ED\\\\u04EF\\\\u04F1\\\\u04F3\\\\u04F5\\\\u04F7\\\\u04F9\\\\u04FB\\\\u04FD\\\\u04FF\\\\u0501\\\\u0503\\\\u0505\\\\u0507\\\\u0509\\\\u050B\\\\u050D\\\\u050F\\\\u0511\\\\u0513\\\\u0515\\\\u0517\\\\u0519\\\\u051B\\\\u051D\\\\u051F\\\\u0521\\\\u0523\\\\u0525\\\\u0527\\\\u0529\\\\u052B\\\\u052D\\\\u052F\\\\u0560-\\\\u0588\\\\u10FC\\\\u13F8-\\\\u13FD\\\\u1C80-\\\\u1C88\\\\u1D00-\\\\u1DBF\\\\u1E01\\\\u1E03\\\\u1E05\\\\u1E07\\\\u1E09\\\\u1E0B\\\\u1E0D\\\\u1E0F\\\\u1E11\\\\u1E13\\\\u1E15\\\\u1E17\\\\u1E19\\\\u1E1B\\\\u1E1D\\\\u1E1F\\\\u1E21\\\\u1E23\\\\u1E25\\\\u1E27\\\\u1E29\\\\u1E2B\\\\u1E2D\\\\u1E2F\\\\u1E31\\\\u1E33\\\\u1E35\\\\u1E37\\\\u1E39\\\\u1E3B\\\\u1E3D\\\\u1E3F\\\\u1E41\\\\u1E43\\\\u1E45\\\\u1E47\\\\u1E49\\\\u1E4B\\\\u1E4D\\\\u1E4F\\\\u1E51\\\\u1E53\\\\u1E55\\\\u1E57\\\\u1E59\\\\u1E5B\\\\u1E5D\\\\u1E5F\\\\u1E61\\\\u1E63\\\\u1E65\\\\u1E67\\\\u1E69\\\\u1E6B\\\\u1E6D\\\\u1E6F\\\\u1E71\\\\u1E73\\\\u1E75\\\\u1E77\\\\u1E79\\\\u1E7B\\\\u1E7D\\\\u1E7F\\\\u1E81\\\\u1E83\\\\u1E85\\\\u1E87\\\\u1E89\\\\u1E8B\\\\u1E8D\\\\u1E8F\\\\u1E91\\\\u1E93\\\\u1E95-\\\\u1E9D\\\\u1E9F\\\\u1EA1\\\\u1EA3\\\\u1EA5\\\\u1EA7\\\\u1EA9\\\\u1EAB\\\\u1EAD\\\\u1EAF\\\\u1EB1\\\\u1EB3\\\\u1EB5\\\\u1EB7\\\\u1EB9\\\\u1EBB\\\\u1EBD\\\\u1EBF\\\\u1EC1\\\\u1EC3\\\\u1EC5\\\\u1EC7\\\\u1EC9\\\\u1ECB\\\\u1ECD\\\\u1ECF\\\\u1ED1\\\\u1ED3\\\\u1ED5\\\\u1ED7\\\\u1ED9\\\\u1EDB\\\\u1EDD\\\\u1EDF\\\\u1EE1\\\\u1EE3\\\\u1EE5\\\\u1EE7\\\\u1EE9\\\\u1EEB\\\\u1EED\\\\u1EEF\\\\u1EF1\\\\u1EF3\\\\u1EF5\\\\u1EF7\\\\u1EF9\\\\u1EFB\\\\u1EFD\\\\u1EFF-\\\\u1F07\\\\u1F10-\\\\u1F15\\\\u1F20-\\\\u1F27\\\\u1F30-\\\\u1F37\\\\u1F40-\\\\u1F45\\\\u1F50-\\\\u1F57\\\\u1F60-\\\\u1F67\\\\u1F70-\\\\u1F7D\\\\u1F80-\\\\u1F87\\\\u1F90-\\\\u1F97\\\\u1FA0-\\\\u1FA7\\\\u1FB0-\\\\u1FB4\\\\u1FB6\\\\u1FB7\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6\\\\u1FC7\\\\u1FD0-\\\\u1FD3\\\\u1FD6\\\\u1FD7\\\\u1FE0-\\\\u1FE7\\\\u1FF2-\\\\u1FF4\\\\u1FF6\\\\u1FF7\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u210A\\\\u210E\\\\u210F\\\\u2113\\\\u212F\\\\u2134\\\\u2139\\\\u213C\\\\u213D\\\\u2146-\\\\u2149\\\\u214E\\\\u2170-\\\\u217F\\\\u2184\\\\u24D0-\\\\u24E9\\\\u2C30-\\\\u2C5F\\\\u2C61\\\\u2C65\\\\u2C66\\\\u2C68\\\\u2C6A\\\\u2C6C\\\\u2C71\\\\u2C73\\\\u2C74\\\\u2C76-\\\\u2C7D\\\\u2C81\\\\u2C83\\\\u2C85\\\\u2C87\\\\u2C89\\\\u2C8B\\\\u2C8D\\\\u2C8F\\\\u2C91\\\\u2C93\\\\u2C95\\\\u2C97\\\\u2C99\\\\u2C9B\\\\u2C9D\\\\u2C9F\\\\u2CA1\\\\u2CA3\\\\u2CA5\\\\u2CA7\\\\u2CA9\\\\u2CAB\\\\u2CAD\\\\u2CAF\\\\u2CB1\\\\u2CB3\\\\u2CB5\\\\u2CB7\\\\u2CB9\\\\u2CBB\\\\u2CBD\\\\u2CBF\\\\u2CC1\\\\u2CC3\\\\u2CC5\\\\u2CC7\\\\u2CC9\\\\u2CCB\\\\u2CCD\\\\u2CCF\\\\u2CD1\\\\u2CD3\\\\u2CD5\\\\u2CD7\\\\u2CD9\\\\u2CDB\\\\u2CDD\\\\u2CDF\\\\u2CE1\\\\u2CE3\\\\u2CE4\\\\u2CEC\\\\u2CEE\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\uA641\\\\uA643\\\\uA645\\\\uA647\\\\uA649\\\\uA64B\\\\uA64D\\\\uA64F\\\\uA651\\\\uA653\\\\uA655\\\\uA657\\\\uA659\\\\uA65B\\\\uA65D\\\\uA65F\\\\uA661\\\\uA663\\\\uA665\\\\uA667\\\\uA669\\\\uA66B\\\\uA66D\\\\uA681\\\\uA683\\\\uA685\\\\uA687\\\\uA689\\\\uA68B\\\\uA68D\\\\uA68F\\\\uA691\\\\uA693\\\\uA695\\\\uA697\\\\uA699\\\\uA69B-\\\\uA69D\\\\uA723\\\\uA725\\\\uA727\\\\uA729\\\\uA72B\\\\uA72D\\\\uA72F-\\\\uA731\\\\uA733\\\\uA735\\\\uA737\\\\uA739\\\\uA73B\\\\uA73D\\\\uA73F\\\\uA741\\\\uA743\\\\uA745\\\\uA747\\\\uA749\\\\uA74B\\\\uA74D\\\\uA74F\\\\uA751\\\\uA753\\\\uA755\\\\uA757\\\\uA759\\\\uA75B\\\\uA75D\\\\uA75F\\\\uA761\\\\uA763\\\\uA765\\\\uA767\\\\uA769\\\\uA76B\\\\uA76D\\\\uA76F-\\\\uA778\\\\uA77A\\\\uA77C\\\\uA77F\\\\uA781\\\\uA783\\\\uA785\\\\uA787\\\\uA78C\\\\uA78E\\\\uA791\\\\uA793-\\\\uA795\\\\uA797\\\\uA799\\\\uA79B\\\\uA79D\\\\uA79F\\\\uA7A1\\\\uA7A3\\\\uA7A5\\\\uA7A7\\\\uA7A9\\\\uA7AF\\\\uA7B5\\\\uA7B7\\\\uA7B9\\\\uA7BB\\\\uA7BD\\\\uA7BF\\\\uA7C1\\\\uA7C3\\\\uA7C8\\\\uA7CA\\\\uA7D1\\\\uA7D3\\\\uA7D5\\\\uA7D7\\\\uA7D9\\\\uA7F2-\\\\uA7F4\\\\uA7F6\\\\uA7F8-\\\\uA7FA\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB69\\\\uAB70-\\\\uABBF\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFF41-\\\\uFF5A]|\\\\uD801[\\\\uDC28-\\\\uDC4F\\\\uDCD8-\\\\uDCFB\\\\uDD97-\\\\uDDA1\\\\uDDA3-\\\\uDDB1\\\\uDDB3-\\\\uDDB9\\\\uDDBB\\\\uDDBC\\\\uDF80\\\\uDF83-\\\\uDF85\\\\uDF87-\\\\uDFB0\\\\uDFB2-\\\\uDFBA]|\\\\uD803[\\\\uDCC0-\\\\uDCF2]|\\\\uD806[\\\\uDCC0-\\\\uDCDF]|\\\\uD81B[\\\\uDE60-\\\\uDE7F]|\\\\uD835[\\\\uDC1A-\\\\uDC33\\\\uDC4E-\\\\uDC54\\\\uDC56-\\\\uDC67\\\\uDC82-\\\\uDC9B\\\\uDCB6-\\\\uDCB9\\\\uDCBB\\\\uDCBD-\\\\uDCC3\\\\uDCC5-\\\\uDCCF\\\\uDCEA-\\\\uDD03\\\\uDD1E-\\\\uDD37\\\\uDD52-\\\\uDD6B\\\\uDD86-\\\\uDD9F\\\\uDDBA-\\\\uDDD3\\\\uDDEE-\\\\uDE07\\\\uDE22-\\\\uDE3B\\\\uDE56-\\\\uDE6F\\\\uDE8A-\\\\uDEA5\\\\uDEC2-\\\\uDEDA\\\\uDEDC-\\\\uDEE1\\\\uDEFC-\\\\uDF14\\\\uDF16-\\\\uDF1B\\\\uDF36-\\\\uDF4E\\\\uDF50-\\\\uDF55\\\\uDF70-\\\\uDF88\\\\uDF8A-\\\\uDF8F\\\\uDFAA-\\\\uDFC2\\\\uDFC4-\\\\uDFC9\\\\uDFCB]|\\\\uD837[\\\\uDF00-\\\\uDF09\\\\uDF0B-\\\\uDF1E\\\\uDF25-\\\\uDF2A]|\\\\uD838[\\\\uDC30-\\\\uDC6D]|\\\\uD83A[\\\\uDD22-\\\\uDD43])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$NotPreLower_\": \"(?:(?![\\\\n\\\\r!\\\\.\\\\?A-Za-z\\\\x85\\\\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-\\\\u0589\\\\u05D0-\\\\u05EA\\\\u05EF-\\\\u05F3\\\\u061D-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF-\\\\u0702\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07F9\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0837\\\\u0839\\\\u083D\\\\u083E\\\\u0840-\\\\u0858\\\\u0860-\\\\u086A\\\\u0870-\\\\u0887\\\\u0889-\\\\u088E\\\\u08A0-\\\\u08C9\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0964\\\\u0965\\\\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\\\\u104A\\\\u104B\\\\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\\\\u1362\\\\u1367\\\\u1368\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166E-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u1711\\\\u171F-\\\\u1731\\\\u1735\\\\u1736\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1803\\\\u1809\\\\u1820-\\\\u1878\\\\u1880-\\\\u1884\\\\u1887-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1944\\\\u1945\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7-\\\\u1AAB\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4C\\\\u1B5A\\\\u1B5B\\\\u1B5E\\\\u1B5F\\\\u1B7D\\\\u1B7E\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C3B\\\\u1C3C\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\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\\\\u2024\\\\u2028\\\\u2029\\\\u203C\\\\u203D\\\\u2047-\\\\u2049\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u24B6-\\\\u24E9\\\\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\\\\u2E2E\\\\u2E2F\\\\u2E3C\\\\u2E53\\\\u2E54\\\\u3002\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312F\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BF\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DBF\\\\u4E00-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA4FF-\\\\uA60C\\\\uA60E-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA6F3\\\\uA6F7\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA7CA\\\\uA7D0\\\\uA7D1\\\\uA7D3\\\\uA7D5-\\\\uA7D9\\\\uA7F2-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA876\\\\uA877\\\\uA882-\\\\uA8B3\\\\uA8CE\\\\uA8CF\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA8FD\\\\uA8FE\\\\uA90A-\\\\uA925\\\\uA92F-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9C8\\\\uA9C9\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA5D-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF0-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB69\\\\uAB70-\\\\uABE2\\\\uABEB\\\\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\\\\uFE52\\\\uFE56\\\\uFE57\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF01\\\\uFF0E\\\\uFF1F\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF61\\\\uFF66-\\\\uFF9D\\\\uFFA0-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]|\\\\uD800[\\\\uDC00-\\\\uDC0B\\\\uDC0D-\\\\uDC26\\\\uDC28-\\\\uDC3A\\\\uDC3C\\\\uDC3D\\\\uDC3F-\\\\uDC4D\\\\uDC50-\\\\uDC5D\\\\uDC80-\\\\uDCFA\\\\uDD40-\\\\uDD74\\\\uDE80-\\\\uDE9C\\\\uDEA0-\\\\uDED0\\\\uDF00-\\\\uDF1F\\\\uDF2D-\\\\uDF4A\\\\uDF50-\\\\uDF75\\\\uDF80-\\\\uDF9D\\\\uDFA0-\\\\uDFC3\\\\uDFC8-\\\\uDFCF\\\\uDFD1-\\\\uDFD5]|\\\\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\\\\uDE56\\\\uDE57\\\\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\\\\uDF55-\\\\uDF59\\\\uDF70-\\\\uDF81\\\\uDF86-\\\\uDF89\\\\uDFB0-\\\\uDFC4\\\\uDFE0-\\\\uDFF6]|\\\\uD804[\\\\uDC03-\\\\uDC37\\\\uDC47\\\\uDC48\\\\uDC71\\\\uDC72\\\\uDC75\\\\uDC83-\\\\uDCAF\\\\uDCBE-\\\\uDCC1\\\\uDCD0-\\\\uDCE8\\\\uDD03-\\\\uDD26\\\\uDD41-\\\\uDD44\\\\uDD47\\\\uDD50-\\\\uDD72\\\\uDD76\\\\uDD83-\\\\uDDB2\\\\uDDC1-\\\\uDDC6\\\\uDDCD\\\\uDDDA\\\\uDDDC\\\\uDDDE\\\\uDDDF\\\\uDE00-\\\\uDE11\\\\uDE13-\\\\uDE2B\\\\uDE38\\\\uDE39\\\\uDE3B\\\\uDE3C\\\\uDE3F\\\\uDE40\\\\uDE80-\\\\uDE86\\\\uDE88\\\\uDE8A-\\\\uDE8D\\\\uDE8F-\\\\uDE9D\\\\uDE9F-\\\\uDEA9\\\\uDEB0-\\\\uDEDE\\\\uDF05-\\\\uDF0C\\\\uDF0F\\\\uDF10\\\\uDF13-\\\\uDF28\\\\uDF2A-\\\\uDF30\\\\uDF32\\\\uDF33\\\\uDF35-\\\\uDF39\\\\uDF3D\\\\uDF50\\\\uDF5D-\\\\uDF61]|\\\\uD805[\\\\uDC00-\\\\uDC34\\\\uDC47-\\\\uDC4C\\\\uDC5F-\\\\uDC61\\\\uDC80-\\\\uDCAF\\\\uDCC4\\\\uDCC5\\\\uDCC7\\\\uDD80-\\\\uDDAE\\\\uDDC2\\\\uDDC3\\\\uDDC9-\\\\uDDDB\\\\uDE00-\\\\uDE2F\\\\uDE41\\\\uDE42\\\\uDE44\\\\uDE80-\\\\uDEAA\\\\uDEB8\\\\uDF00-\\\\uDF1A\\\\uDF3C-\\\\uDF3E\\\\uDF40-\\\\uDF46]|\\\\uD806[\\\\uDC00-\\\\uDC2B\\\\uDCA0-\\\\uDCDF\\\\uDCFF-\\\\uDD06\\\\uDD09\\\\uDD0C-\\\\uDD13\\\\uDD15\\\\uDD16\\\\uDD18-\\\\uDD2F\\\\uDD3F\\\\uDD41\\\\uDD44\\\\uDD46\\\\uDDA0-\\\\uDDA7\\\\uDDAA-\\\\uDDD0\\\\uDDE1\\\\uDDE3\\\\uDE00\\\\uDE0B-\\\\uDE32\\\\uDE3A\\\\uDE42\\\\uDE43\\\\uDE50\\\\uDE5C-\\\\uDE89\\\\uDE9B-\\\\uDE9D\\\\uDEB0-\\\\uDEF8]|\\\\uD807[\\\\uDC00-\\\\uDC08\\\\uDC0A-\\\\uDC2E\\\\uDC40-\\\\uDC42\\\\uDC72-\\\\uDC8F\\\\uDD00-\\\\uDD06\\\\uDD08\\\\uDD09\\\\uDD0B-\\\\uDD30\\\\uDD46\\\\uDD60-\\\\uDD65\\\\uDD67\\\\uDD68\\\\uDD6A-\\\\uDD89\\\\uDD98\\\\uDEE0-\\\\uDEF2\\\\uDEF7\\\\uDEF8\\\\uDF02\\\\uDF04-\\\\uDF10\\\\uDF12-\\\\uDF33\\\\uDF43\\\\uDF44\\\\uDFB0]|\\\\uD808[\\\\uDC00-\\\\uDF99]|\\\\uD809[\\\\uDC00-\\\\uDC6E\\\\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\\\\uDE6E-\\\\uDEBE\\\\uDED0-\\\\uDEED\\\\uDEF5\\\\uDF00-\\\\uDF2F\\\\uDF37\\\\uDF38\\\\uDF40-\\\\uDF44\\\\uDF63-\\\\uDF77\\\\uDF7D-\\\\uDF8F]|\\\\uD81B[\\\\uDE40-\\\\uDE7F\\\\uDE98\\\\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\\\\uDC9F]|\\\\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]|\\\\uD836\\\\uDE88|\\\\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]|\\\\uD83C[\\\\uDD30-\\\\uDD49\\\\uDD50-\\\\uDD69\\\\uDD70-\\\\uDD89]|\\\\uD869[\\\\uDC00-\\\\uDEDF\\\\uDF00-\\\\uDFFF]|\\\\uD86D[\\\\uDC00-\\\\uDF39\\\\uDF40-\\\\uDFFF]|\\\\uD86E[\\\\uDC00-\\\\uDC1D\\\\uDC20-\\\\uDFFF]|\\\\uD873[\\\\uDC00-\\\\uDEA1\\\\uDEB0-\\\\uDFFF]|\\\\uD87A[\\\\uDC00-\\\\uDFE0]|\\\\uD87E[\\\\uDC00-\\\\uDE1D]|\\\\uD884[\\\\uDC00-\\\\uDF4A\\\\uDF50-\\\\uDFFF]|\\\\uD888[\\\\uDC00-\\\\uDFAF])[\\\\s\\\\S])\",\n \"$Numeric\": \"((?:[0-9\\\\u0660-\\\\u0669\\\\u066B\\\\u066C\\\\u06F0-\\\\u06F9\\\\u07C0-\\\\u07C9\\\\u0966-\\\\u096F\\\\u09E6-\\\\u09EF\\\\u0A66-\\\\u0A6F\\\\u0AE6-\\\\u0AEF\\\\u0B66-\\\\u0B6F\\\\u0BE6-\\\\u0BEF\\\\u0C66-\\\\u0C6F\\\\u0CE6-\\\\u0CEF\\\\u0D66-\\\\u0D6F\\\\u0DE6-\\\\u0DEF\\\\u0E50-\\\\u0E59\\\\u0ED0-\\\\u0ED9\\\\u0F20-\\\\u0F29\\\\u1040-\\\\u1049\\\\u1090-\\\\u1099\\\\u17E0-\\\\u17E9\\\\u1810-\\\\u1819\\\\u1946-\\\\u194F\\\\u19D0-\\\\u19D9\\\\u1A80-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1B50-\\\\u1B59\\\\u1BB0-\\\\u1BB9\\\\u1C40-\\\\u1C49\\\\u1C50-\\\\u1C59\\\\uA620-\\\\uA629\\\\uA8D0-\\\\uA8D9\\\\uA900-\\\\uA909\\\\uA9D0-\\\\uA9D9\\\\uA9F0-\\\\uA9F9\\\\uAA50-\\\\uAA59\\\\uABF0-\\\\uABF9\\\\uFF10-\\\\uFF19]|\\\\uD801[\\\\uDCA0-\\\\uDCA9]|\\\\uD803[\\\\uDD30-\\\\uDD39]|\\\\uD804[\\\\uDC66-\\\\uDC6F\\\\uDCF0-\\\\uDCF9\\\\uDD36-\\\\uDD3F\\\\uDDD0-\\\\uDDD9\\\\uDEF0-\\\\uDEF9]|\\\\uD805[\\\\uDC50-\\\\uDC59\\\\uDCD0-\\\\uDCD9\\\\uDE50-\\\\uDE59\\\\uDEC0-\\\\uDEC9\\\\uDF30-\\\\uDF39]|\\\\uD806[\\\\uDCE0-\\\\uDCE9\\\\uDD50-\\\\uDD59]|\\\\uD807[\\\\uDC50-\\\\uDC59\\\\uDD50-\\\\uDD59\\\\uDDA0-\\\\uDDA9\\\\uDF50-\\\\uDF59]|\\\\uD81A[\\\\uDE60-\\\\uDE69\\\\uDEC0-\\\\uDEC9\\\\uDF50-\\\\uDF59]|\\\\uD835[\\\\uDFCE-\\\\uDFFF]|\\\\uD838[\\\\uDD40-\\\\uDD49\\\\uDEF0-\\\\uDEF9]|\\\\uD839[\\\\uDCF0-\\\\uDCF9]|\\\\uD83A[\\\\uDD50-\\\\uDD59]|\\\\uD83E[\\\\uDFF0-\\\\uDFF9])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$OLetter\": \"((?:[\\\\u01BB\\\\u01C0-\\\\u01C3\\\\u0294\\\\u02B9-\\\\u02BF\\\\u02C6-\\\\u02D1\\\\u02EC\\\\u02EE\\\\u0374\\\\u0559\\\\u05D0-\\\\u05EA\\\\u05EF-\\\\u05F3\\\\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\\\\u10D0-\\\\u10FA\\\\u10FD-\\\\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\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\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\\\\u1C90-\\\\u1CBA\\\\u1CBD-\\\\u1CBF\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF3\\\\u1CF5\\\\u1CF6\\\\u1CFA\\\\u2135-\\\\u2138\\\\u2180-\\\\u2182\\\\u2185-\\\\u2188\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312F\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BF\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DBF\\\\u4E00-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA66E\\\\uA67F\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA788\\\\uA78F\\\\uA7F7\\\\uA7FB-\\\\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\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\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\\\\uFF66-\\\\uFF9D\\\\uFFA0-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]|\\\\uD800[\\\\uDC00-\\\\uDC0B\\\\uDC0D-\\\\uDC26\\\\uDC28-\\\\uDC3A\\\\uDC3C\\\\uDC3D\\\\uDC3F-\\\\uDC4D\\\\uDC50-\\\\uDC5D\\\\uDC80-\\\\uDCFA\\\\uDD40-\\\\uDD74\\\\uDE80-\\\\uDE9C\\\\uDEA0-\\\\uDED0\\\\uDF00-\\\\uDF1F\\\\uDF2D-\\\\uDF4A\\\\uDF50-\\\\uDF75\\\\uDF80-\\\\uDF9D\\\\uDFA0-\\\\uDFC3\\\\uDFC8-\\\\uDFCF\\\\uDFD1-\\\\uDFD5]|\\\\uD801[\\\\uDC50-\\\\uDC9D\\\\uDD00-\\\\uDD27\\\\uDD30-\\\\uDD63\\\\uDE00-\\\\uDF36\\\\uDF40-\\\\uDF55\\\\uDF60-\\\\uDF67\\\\uDF81\\\\uDF82]|\\\\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\\\\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\\\\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[\\\\uDC00-\\\\uDC6E\\\\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[\\\\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]|\\\\uD837\\\\uDF0A|\\\\uD838[\\\\uDD00-\\\\uDD2C\\\\uDD37-\\\\uDD3D\\\\uDD4E\\\\uDE90-\\\\uDEAD\\\\uDEC0-\\\\uDEEB]|\\\\uD839[\\\\uDCD0-\\\\uDCEB\\\\uDFE0-\\\\uDFE6\\\\uDFE8-\\\\uDFEB\\\\uDFED\\\\uDFEE\\\\uDFF0-\\\\uDFFE]|\\\\uD83A[\\\\uDC00-\\\\uDCC4\\\\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]|\\\\uD87E[\\\\uDC00-\\\\uDE1D]|\\\\uD884[\\\\uDC00-\\\\uDF4A\\\\uDF50-\\\\uDFFF]|\\\\uD888[\\\\uDC00-\\\\uDFAF])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$ParaSep\": \"([\\\\x85\\\\u2028\\\\u2029]|\\\\r|\\\\n)\",\n \"$SATerm\": \"(((?:[!\\\\?\\\\u0589\\\\u061D-\\\\u061F\\\\u06D4\\\\u0700-\\\\u0702\\\\u07F9\\\\u0837\\\\u0839\\\\u083D\\\\u083E\\\\u0964\\\\u0965\\\\u104A\\\\u104B\\\\u1362\\\\u1367\\\\u1368\\\\u166E\\\\u1735\\\\u1736\\\\u1803\\\\u1809\\\\u1944\\\\u1945\\\\u1AA8-\\\\u1AAB\\\\u1B5A\\\\u1B5B\\\\u1B5E\\\\u1B5F\\\\u1B7D\\\\u1B7E\\\\u1C3B\\\\u1C3C\\\\u1C7E\\\\u1C7F\\\\u203C\\\\u203D\\\\u2047-\\\\u2049\\\\u2E2E\\\\u2E3C\\\\u2E53\\\\u2E54\\\\u3002\\\\uA4FF\\\\uA60E\\\\uA60F\\\\uA6F3\\\\uA6F7\\\\uA876\\\\uA877\\\\uA8CE\\\\uA8CF\\\\uA92F\\\\uA9C8\\\\uA9C9\\\\uAA5D-\\\\uAA5F\\\\uAAF0\\\\uAAF1\\\\uABEB\\\\uFE56\\\\uFE57\\\\uFF01\\\\uFF1F\\\\uFF61]|\\\\uD802[\\\\uDE56\\\\uDE57]|\\\\uD803[\\\\uDF55-\\\\uDF59\\\\uDF86-\\\\uDF89]|\\\\uD804[\\\\uDC47\\\\uDC48\\\\uDCBE-\\\\uDCC1\\\\uDD41-\\\\uDD43\\\\uDDC5\\\\uDDC6\\\\uDDCD\\\\uDDDE\\\\uDDDF\\\\uDE38\\\\uDE39\\\\uDE3B\\\\uDE3C\\\\uDEA9]|\\\\uD805[\\\\uDC4B\\\\uDC4C\\\\uDDC2\\\\uDDC3\\\\uDDC9-\\\\uDDD7\\\\uDE41\\\\uDE42\\\\uDF3C-\\\\uDF3E]|\\\\uD806[\\\\uDD44\\\\uDD46\\\\uDE42\\\\uDE43\\\\uDE9B\\\\uDE9C]|\\\\uD807[\\\\uDC41\\\\uDC42\\\\uDEF7\\\\uDEF8\\\\uDF43\\\\uDF44]|\\\\uD81A[\\\\uDE6E\\\\uDE6F\\\\uDEF5\\\\uDF37\\\\uDF38\\\\uDF44]|\\\\uD81B\\\\uDE98|\\\\uD82F\\\\uDC9F|\\\\uD836\\\\uDE88)(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)|([\\\\.\\\\u2024\\\\uFE52\\\\uFF0E](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*))\",\n \"$SContinue\": \"([,\\\\x2D:\\\\u055D\\\\u060C\\\\u060D\\\\u07F8\\\\u1802\\\\u1808\\\\u2013\\\\u2014\\\\u3001\\\\uFE10\\\\uFE11\\\\uFE13\\\\uFE31\\\\uFE32\\\\uFE50\\\\uFE51\\\\uFE55\\\\uFE58\\\\uFE63\\\\uFF0C\\\\uFF0D\\\\uFF1A\\\\uFF64](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$STerm\": \"((?:[!\\\\?\\\\u0589\\\\u061D-\\\\u061F\\\\u06D4\\\\u0700-\\\\u0702\\\\u07F9\\\\u0837\\\\u0839\\\\u083D\\\\u083E\\\\u0964\\\\u0965\\\\u104A\\\\u104B\\\\u1362\\\\u1367\\\\u1368\\\\u166E\\\\u1735\\\\u1736\\\\u1803\\\\u1809\\\\u1944\\\\u1945\\\\u1AA8-\\\\u1AAB\\\\u1B5A\\\\u1B5B\\\\u1B5E\\\\u1B5F\\\\u1B7D\\\\u1B7E\\\\u1C3B\\\\u1C3C\\\\u1C7E\\\\u1C7F\\\\u203C\\\\u203D\\\\u2047-\\\\u2049\\\\u2E2E\\\\u2E3C\\\\u2E53\\\\u2E54\\\\u3002\\\\uA4FF\\\\uA60E\\\\uA60F\\\\uA6F3\\\\uA6F7\\\\uA876\\\\uA877\\\\uA8CE\\\\uA8CF\\\\uA92F\\\\uA9C8\\\\uA9C9\\\\uAA5D-\\\\uAA5F\\\\uAAF0\\\\uAAF1\\\\uABEB\\\\uFE56\\\\uFE57\\\\uFF01\\\\uFF1F\\\\uFF61]|\\\\uD802[\\\\uDE56\\\\uDE57]|\\\\uD803[\\\\uDF55-\\\\uDF59\\\\uDF86-\\\\uDF89]|\\\\uD804[\\\\uDC47\\\\uDC48\\\\uDCBE-\\\\uDCC1\\\\uDD41-\\\\uDD43\\\\uDDC5\\\\uDDC6\\\\uDDCD\\\\uDDDE\\\\uDDDF\\\\uDE38\\\\uDE39\\\\uDE3B\\\\uDE3C\\\\uDEA9]|\\\\uD805[\\\\uDC4B\\\\uDC4C\\\\uDDC2\\\\uDDC3\\\\uDDC9-\\\\uDDD7\\\\uDE41\\\\uDE42\\\\uDF3C-\\\\uDF3E]|\\\\uD806[\\\\uDD44\\\\uDD46\\\\uDE42\\\\uDE43\\\\uDE9B\\\\uDE9C]|\\\\uD807[\\\\uDC41\\\\uDC42\\\\uDEF7\\\\uDEF8\\\\uDF43\\\\uDF44]|\\\\uD81A[\\\\uDE6E\\\\uDE6F\\\\uDEF5\\\\uDF37\\\\uDF38\\\\uDF44]|\\\\uD81B\\\\uDE98|\\\\uD82F\\\\uDC9F|\\\\uD836\\\\uDE88)(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Sep\": \"[\\\\x85\\\\u2028\\\\u2029]\",\n \"$Sp\": \"([\\\\t\\\\x0B\\\\f \\\\xA0\\\\u1680\\\\u2000-\\\\u200A\\\\u202F\\\\u205F\\\\u3000](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Upper\": \"((?:[A-Z\\\\xC0-\\\\xD6\\\\xD8-\\\\xDE\\\\u0100\\\\u0102\\\\u0104\\\\u0106\\\\u0108\\\\u010A\\\\u010C\\\\u010E\\\\u0110\\\\u0112\\\\u0114\\\\u0116\\\\u0118\\\\u011A\\\\u011C\\\\u011E\\\\u0120\\\\u0122\\\\u0124\\\\u0126\\\\u0128\\\\u012A\\\\u012C\\\\u012E\\\\u0130\\\\u0132\\\\u0134\\\\u0136\\\\u0139\\\\u013B\\\\u013D\\\\u013F\\\\u0141\\\\u0143\\\\u0145\\\\u0147\\\\u014A\\\\u014C\\\\u014E\\\\u0150\\\\u0152\\\\u0154\\\\u0156\\\\u0158\\\\u015A\\\\u015C\\\\u015E\\\\u0160\\\\u0162\\\\u0164\\\\u0166\\\\u0168\\\\u016A\\\\u016C\\\\u016E\\\\u0170\\\\u0172\\\\u0174\\\\u0176\\\\u0178\\\\u0179\\\\u017B\\\\u017D\\\\u0181\\\\u0182\\\\u0184\\\\u0186\\\\u0187\\\\u0189-\\\\u018B\\\\u018E-\\\\u0191\\\\u0193\\\\u0194\\\\u0196-\\\\u0198\\\\u019C\\\\u019D\\\\u019F\\\\u01A0\\\\u01A2\\\\u01A4\\\\u01A6\\\\u01A7\\\\u01A9\\\\u01AC\\\\u01AE\\\\u01AF\\\\u01B1-\\\\u01B3\\\\u01B5\\\\u01B7\\\\u01B8\\\\u01BC\\\\u01C4\\\\u01C5\\\\u01C7\\\\u01C8\\\\u01CA\\\\u01CB\\\\u01CD\\\\u01CF\\\\u01D1\\\\u01D3\\\\u01D5\\\\u01D7\\\\u01D9\\\\u01DB\\\\u01DE\\\\u01E0\\\\u01E2\\\\u01E4\\\\u01E6\\\\u01E8\\\\u01EA\\\\u01EC\\\\u01EE\\\\u01F1\\\\u01F2\\\\u01F4\\\\u01F6-\\\\u01F8\\\\u01FA\\\\u01FC\\\\u01FE\\\\u0200\\\\u0202\\\\u0204\\\\u0206\\\\u0208\\\\u020A\\\\u020C\\\\u020E\\\\u0210\\\\u0212\\\\u0214\\\\u0216\\\\u0218\\\\u021A\\\\u021C\\\\u021E\\\\u0220\\\\u0222\\\\u0224\\\\u0226\\\\u0228\\\\u022A\\\\u022C\\\\u022E\\\\u0230\\\\u0232\\\\u023A\\\\u023B\\\\u023D\\\\u023E\\\\u0241\\\\u0243-\\\\u0246\\\\u0248\\\\u024A\\\\u024C\\\\u024E\\\\u0370\\\\u0372\\\\u0376\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E\\\\u038F\\\\u0391-\\\\u03A1\\\\u03A3-\\\\u03AB\\\\u03CF\\\\u03D2-\\\\u03D4\\\\u03D8\\\\u03DA\\\\u03DC\\\\u03DE\\\\u03E0\\\\u03E2\\\\u03E4\\\\u03E6\\\\u03E8\\\\u03EA\\\\u03EC\\\\u03EE\\\\u03F4\\\\u03F7\\\\u03F9\\\\u03FA\\\\u03FD-\\\\u042F\\\\u0460\\\\u0462\\\\u0464\\\\u0466\\\\u0468\\\\u046A\\\\u046C\\\\u046E\\\\u0470\\\\u0472\\\\u0474\\\\u0476\\\\u0478\\\\u047A\\\\u047C\\\\u047E\\\\u0480\\\\u048A\\\\u048C\\\\u048E\\\\u0490\\\\u0492\\\\u0494\\\\u0496\\\\u0498\\\\u049A\\\\u049C\\\\u049E\\\\u04A0\\\\u04A2\\\\u04A4\\\\u04A6\\\\u04A8\\\\u04AA\\\\u04AC\\\\u04AE\\\\u04B0\\\\u04B2\\\\u04B4\\\\u04B6\\\\u04B8\\\\u04BA\\\\u04BC\\\\u04BE\\\\u04C0\\\\u04C1\\\\u04C3\\\\u04C5\\\\u04C7\\\\u04C9\\\\u04CB\\\\u04CD\\\\u04D0\\\\u04D2\\\\u04D4\\\\u04D6\\\\u04D8\\\\u04DA\\\\u04DC\\\\u04DE\\\\u04E0\\\\u04E2\\\\u04E4\\\\u04E6\\\\u04E8\\\\u04EA\\\\u04EC\\\\u04EE\\\\u04F0\\\\u04F2\\\\u04F4\\\\u04F6\\\\u04F8\\\\u04FA\\\\u04FC\\\\u04FE\\\\u0500\\\\u0502\\\\u0504\\\\u0506\\\\u0508\\\\u050A\\\\u050C\\\\u050E\\\\u0510\\\\u0512\\\\u0514\\\\u0516\\\\u0518\\\\u051A\\\\u051C\\\\u051E\\\\u0520\\\\u0522\\\\u0524\\\\u0526\\\\u0528\\\\u052A\\\\u052C\\\\u052E\\\\u0531-\\\\u0556\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u13A0-\\\\u13F5\\\\u1E00\\\\u1E02\\\\u1E04\\\\u1E06\\\\u1E08\\\\u1E0A\\\\u1E0C\\\\u1E0E\\\\u1E10\\\\u1E12\\\\u1E14\\\\u1E16\\\\u1E18\\\\u1E1A\\\\u1E1C\\\\u1E1E\\\\u1E20\\\\u1E22\\\\u1E24\\\\u1E26\\\\u1E28\\\\u1E2A\\\\u1E2C\\\\u1E2E\\\\u1E30\\\\u1E32\\\\u1E34\\\\u1E36\\\\u1E38\\\\u1E3A\\\\u1E3C\\\\u1E3E\\\\u1E40\\\\u1E42\\\\u1E44\\\\u1E46\\\\u1E48\\\\u1E4A\\\\u1E4C\\\\u1E4E\\\\u1E50\\\\u1E52\\\\u1E54\\\\u1E56\\\\u1E58\\\\u1E5A\\\\u1E5C\\\\u1E5E\\\\u1E60\\\\u1E62\\\\u1E64\\\\u1E66\\\\u1E68\\\\u1E6A\\\\u1E6C\\\\u1E6E\\\\u1E70\\\\u1E72\\\\u1E74\\\\u1E76\\\\u1E78\\\\u1E7A\\\\u1E7C\\\\u1E7E\\\\u1E80\\\\u1E82\\\\u1E84\\\\u1E86\\\\u1E88\\\\u1E8A\\\\u1E8C\\\\u1E8E\\\\u1E90\\\\u1E92\\\\u1E94\\\\u1E9E\\\\u1EA0\\\\u1EA2\\\\u1EA4\\\\u1EA6\\\\u1EA8\\\\u1EAA\\\\u1EAC\\\\u1EAE\\\\u1EB0\\\\u1EB2\\\\u1EB4\\\\u1EB6\\\\u1EB8\\\\u1EBA\\\\u1EBC\\\\u1EBE\\\\u1EC0\\\\u1EC2\\\\u1EC4\\\\u1EC6\\\\u1EC8\\\\u1ECA\\\\u1ECC\\\\u1ECE\\\\u1ED0\\\\u1ED2\\\\u1ED4\\\\u1ED6\\\\u1ED8\\\\u1EDA\\\\u1EDC\\\\u1EDE\\\\u1EE0\\\\u1EE2\\\\u1EE4\\\\u1EE6\\\\u1EE8\\\\u1EEA\\\\u1EEC\\\\u1EEE\\\\u1EF0\\\\u1EF2\\\\u1EF4\\\\u1EF6\\\\u1EF8\\\\u1EFA\\\\u1EFC\\\\u1EFE\\\\u1F08-\\\\u1F0F\\\\u1F18-\\\\u1F1D\\\\u1F28-\\\\u1F2F\\\\u1F38-\\\\u1F3F\\\\u1F48-\\\\u1F4D\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F\\\\u1F68-\\\\u1F6F\\\\u1F88-\\\\u1F8F\\\\u1F98-\\\\u1F9F\\\\u1FA8-\\\\u1FAF\\\\u1FB8-\\\\u1FBC\\\\u1FC8-\\\\u1FCC\\\\u1FD8-\\\\u1FDB\\\\u1FE8-\\\\u1FEC\\\\u1FF8-\\\\u1FFC\\\\u2102\\\\u2107\\\\u210B-\\\\u210D\\\\u2110-\\\\u2112\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u2130-\\\\u2133\\\\u213E\\\\u213F\\\\u2145\\\\u2160-\\\\u216F\\\\u2183\\\\u24B6-\\\\u24CF\\\\u2C00-\\\\u2C2F\\\\u2C60\\\\u2C62-\\\\u2C64\\\\u2C67\\\\u2C69\\\\u2C6B\\\\u2C6D-\\\\u2C70\\\\u2C72\\\\u2C75\\\\u2C7E-\\\\u2C80\\\\u2C82\\\\u2C84\\\\u2C86\\\\u2C88\\\\u2C8A\\\\u2C8C\\\\u2C8E\\\\u2C90\\\\u2C92\\\\u2C94\\\\u2C96\\\\u2C98\\\\u2C9A\\\\u2C9C\\\\u2C9E\\\\u2CA0\\\\u2CA2\\\\u2CA4\\\\u2CA6\\\\u2CA8\\\\u2CAA\\\\u2CAC\\\\u2CAE\\\\u2CB0\\\\u2CB2\\\\u2CB4\\\\u2CB6\\\\u2CB8\\\\u2CBA\\\\u2CBC\\\\u2CBE\\\\u2CC0\\\\u2CC2\\\\u2CC4\\\\u2CC6\\\\u2CC8\\\\u2CCA\\\\u2CCC\\\\u2CCE\\\\u2CD0\\\\u2CD2\\\\u2CD4\\\\u2CD6\\\\u2CD8\\\\u2CDA\\\\u2CDC\\\\u2CDE\\\\u2CE0\\\\u2CE2\\\\u2CEB\\\\u2CED\\\\u2CF2\\\\uA640\\\\uA642\\\\uA644\\\\uA646\\\\uA648\\\\uA64A\\\\uA64C\\\\uA64E\\\\uA650\\\\uA652\\\\uA654\\\\uA656\\\\uA658\\\\uA65A\\\\uA65C\\\\uA65E\\\\uA660\\\\uA662\\\\uA664\\\\uA666\\\\uA668\\\\uA66A\\\\uA66C\\\\uA680\\\\uA682\\\\uA684\\\\uA686\\\\uA688\\\\uA68A\\\\uA68C\\\\uA68E\\\\uA690\\\\uA692\\\\uA694\\\\uA696\\\\uA698\\\\uA69A\\\\uA722\\\\uA724\\\\uA726\\\\uA728\\\\uA72A\\\\uA72C\\\\uA72E\\\\uA732\\\\uA734\\\\uA736\\\\uA738\\\\uA73A\\\\uA73C\\\\uA73E\\\\uA740\\\\uA742\\\\uA744\\\\uA746\\\\uA748\\\\uA74A\\\\uA74C\\\\uA74E\\\\uA750\\\\uA752\\\\uA754\\\\uA756\\\\uA758\\\\uA75A\\\\uA75C\\\\uA75E\\\\uA760\\\\uA762\\\\uA764\\\\uA766\\\\uA768\\\\uA76A\\\\uA76C\\\\uA76E\\\\uA779\\\\uA77B\\\\uA77D\\\\uA77E\\\\uA780\\\\uA782\\\\uA784\\\\uA786\\\\uA78B\\\\uA78D\\\\uA790\\\\uA792\\\\uA796\\\\uA798\\\\uA79A\\\\uA79C\\\\uA79E\\\\uA7A0\\\\uA7A2\\\\uA7A4\\\\uA7A6\\\\uA7A8\\\\uA7AA-\\\\uA7AE\\\\uA7B0-\\\\uA7B4\\\\uA7B6\\\\uA7B8\\\\uA7BA\\\\uA7BC\\\\uA7BE\\\\uA7C0\\\\uA7C2\\\\uA7C4-\\\\uA7C7\\\\uA7C9\\\\uA7D0\\\\uA7D6\\\\uA7D8\\\\uA7F5\\\\uFF21-\\\\uFF3A]|\\\\uD801[\\\\uDC00-\\\\uDC27\\\\uDCB0-\\\\uDCD3\\\\uDD70-\\\\uDD7A\\\\uDD7C-\\\\uDD8A\\\\uDD8C-\\\\uDD92\\\\uDD94\\\\uDD95]|\\\\uD803[\\\\uDC80-\\\\uDCB2]|\\\\uD806[\\\\uDCA0-\\\\uDCBF]|\\\\uD81B[\\\\uDE40-\\\\uDE5F]|\\\\uD835[\\\\uDC00-\\\\uDC19\\\\uDC34-\\\\uDC4D\\\\uDC68-\\\\uDC81\\\\uDC9C\\\\uDC9E\\\\uDC9F\\\\uDCA2\\\\uDCA5\\\\uDCA6\\\\uDCA9-\\\\uDCAC\\\\uDCAE-\\\\uDCB5\\\\uDCD0-\\\\uDCE9\\\\uDD04\\\\uDD05\\\\uDD07-\\\\uDD0A\\\\uDD0D-\\\\uDD14\\\\uDD16-\\\\uDD1C\\\\uDD38\\\\uDD39\\\\uDD3B-\\\\uDD3E\\\\uDD40-\\\\uDD44\\\\uDD46\\\\uDD4A-\\\\uDD50\\\\uDD6C-\\\\uDD85\\\\uDDA0-\\\\uDDB9\\\\uDDD4-\\\\uDDED\\\\uDE08-\\\\uDE21\\\\uDE3C-\\\\uDE55\\\\uDE70-\\\\uDE89\\\\uDEA8-\\\\uDEC0\\\\uDEE2-\\\\uDEFA\\\\uDF1C-\\\\uDF34\\\\uDF56-\\\\uDF6E\\\\uDF90-\\\\uDFA8\\\\uDFCA]|\\\\uD83A[\\\\uDD00-\\\\uDD21]|\\\\uD83C[\\\\uDD30-\\\\uDD49\\\\uDD50-\\\\uDD69\\\\uDD70-\\\\uDD89])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200B-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\"\n }\n },\n \"word\": {\n \"segmentRules\": {\n \"10\": {\n \"after\": \"$AHLetter\",\n \"before\": \"$Numeric\",\n \"breaks\": false\n },\n \"11\": {\n \"after\": \"$Numeric\",\n \"before\": \"$Numeric($MidNum|$MidNumLetQ)\",\n \"breaks\": false\n },\n \"12\": {\n \"after\": \"($MidNum|$MidNumLetQ)$Numeric\",\n \"before\": \"$Numeric\",\n \"breaks\": false\n },\n \"13\": {\n \"after\": \"$Katakana\",\n \"before\": \"$Katakana\",\n \"breaks\": false\n },\n \"13.1\": {\n \"after\": \"$ExtendNumLet\",\n \"before\": \"($AHLetter|$Numeric|$Katakana|$ExtendNumLet)\",\n \"breaks\": false\n },\n \"13.2\": {\n \"after\": \"($AHLetter|$Numeric|$Katakana)\",\n \"before\": \"$ExtendNumLet\",\n \"breaks\": false\n },\n \"15\": {\n \"after\": \"$RI\",\n \"before\": \"^($RI$RI)*$RI\",\n \"breaks\": false\n },\n \"16\": {\n \"after\": \"$RI\",\n \"before\": \"[^\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF\\\\uDCEC-\\\\uDCEF\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A\\\\uDDE6-\\\\uDDFF\\\\uDFFB-\\\\uDFFF\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF]($RI$RI)*$RI\",\n \"breaks\": false\n },\n \"3\": {\n \"after\": \"$LF\",\n \"before\": \"$CR\",\n \"breaks\": false\n },\n \"3.1\": {\n \"before\": \"($Newline|$CR|$LF)\",\n \"breaks\": true\n },\n \"3.2\": {\n \"after\": \"($Newline|$CR|$LF)\",\n \"breaks\": true\n },\n \"3.3\": {\n \"after\": \"$ExtPict\",\n \"before\": \"$ZWJ\",\n \"breaks\": false\n },\n \"3.4\": {\n \"after\": \"$WSegSpace\",\n \"before\": \"$WSegSpace\",\n \"breaks\": false\n },\n \"4\": {\n \"after\": \"(?:$Format|$Extend|$ZWJ)\",\n \"before\": \"$NotBreak_\",\n \"breaks\": false\n },\n \"5\": {\n \"after\": \"$AHLetter\",\n \"before\": \"$AHLetter\",\n \"breaks\": false\n },\n \"6\": {\n \"after\": \"($MidLetter|$MidNumLetQ)$AHLetter\",\n \"before\": \"$AHLetter\",\n \"breaks\": false\n },\n \"7\": {\n \"after\": \"$AHLetter\",\n \"before\": \"$AHLetter($MidLetter|$MidNumLetQ)\",\n \"breaks\": false\n },\n \"7.1\": {\n \"after\": \"$Single_Quote\",\n \"before\": \"$Hebrew_Letter\",\n \"breaks\": false\n },\n \"7.2\": {\n \"after\": \"$Double_Quote$Hebrew_Letter\",\n \"before\": \"$Hebrew_Letter\",\n \"breaks\": false\n },\n \"7.3\": {\n \"after\": \"$Hebrew_Letter\",\n \"before\": \"$Hebrew_Letter$Double_Quote\",\n \"breaks\": false\n },\n \"8\": {\n \"after\": \"$Numeric\",\n \"before\": \"$Numeric\",\n \"breaks\": false\n },\n \"9\": {\n \"after\": \"$Numeric\",\n \"before\": \"$AHLetter\",\n \"breaks\": false\n }\n },\n \"suppressions\": [],\n \"variables\": {\n \"$AHLetter\": \"(((?:[A-Za-z\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02D7\\\\u02DE-\\\\u02FF\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559-\\\\u055C\\\\u055E\\\\u0560-\\\\u0588\\\\u058A\\\\u05F3\\\\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\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u1711\\\\u171F-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1820-\\\\u1878\\\\u1880-\\\\u1884\\\\u1887-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1A00-\\\\u1A16\\\\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\\\\u2160-\\\\u2188\\\\u24B6-\\\\u24E9\\\\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\\\\u303B\\\\u303C\\\\u3105-\\\\u312F\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BF\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA708-\\\\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\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB69\\\\uAB70-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB50-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFFA0-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]|\\\\uD800[\\\\uDC00-\\\\uDC0B\\\\uDC0D-\\\\uDC26\\\\uDC28-\\\\uDC3A\\\\uDC3C\\\\uDC3D\\\\uDC3F-\\\\uDC4D\\\\uDC50-\\\\uDC5D\\\\uDC80-\\\\uDCFA\\\\uDD40-\\\\uDD74\\\\uDE80-\\\\uDE9C\\\\uDEA0-\\\\uDED0\\\\uDF00-\\\\uDF1F\\\\uDF2D-\\\\uDF4A\\\\uDF50-\\\\uDF75\\\\uDF80-\\\\uDF9D\\\\uDFA0-\\\\uDFC3\\\\uDFC8-\\\\uDFCF\\\\uDFD1-\\\\uDFD5]|\\\\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]|\\\\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[\\\\uDC00-\\\\uDC6E\\\\uDC80-\\\\uDD43]|\\\\uD80B[\\\\uDF90-\\\\uDFF0]|\\\\uD80C[\\\\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]|\\\\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]|\\\\uD83C[\\\\uDD30-\\\\uDD49\\\\uDD50-\\\\uDD69\\\\uDD70-\\\\uDD89])|[\\\\u05D0-\\\\u05EA\\\\u05EF-\\\\u05F2\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFB4F])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$ALetter\": \"((?:[A-Za-z\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02D7\\\\u02DE-\\\\u02FF\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559-\\\\u055C\\\\u055E\\\\u0560-\\\\u0588\\\\u058A\\\\u05F3\\\\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\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u1711\\\\u171F-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1820-\\\\u1878\\\\u1880-\\\\u1884\\\\u1887-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1A00-\\\\u1A16\\\\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\\\\u2160-\\\\u2188\\\\u24B6-\\\\u24E9\\\\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\\\\u303B\\\\u303C\\\\u3105-\\\\u312F\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BF\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA708-\\\\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\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB69\\\\uAB70-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB50-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFFA0-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]|\\\\uD800[\\\\uDC00-\\\\uDC0B\\\\uDC0D-\\\\uDC26\\\\uDC28-\\\\uDC3A\\\\uDC3C\\\\uDC3D\\\\uDC3F-\\\\uDC4D\\\\uDC50-\\\\uDC5D\\\\uDC80-\\\\uDCFA\\\\uDD40-\\\\uDD74\\\\uDE80-\\\\uDE9C\\\\uDEA0-\\\\uDED0\\\\uDF00-\\\\uDF1F\\\\uDF2D-\\\\uDF4A\\\\uDF50-\\\\uDF75\\\\uDF80-\\\\uDF9D\\\\uDFA0-\\\\uDFC3\\\\uDFC8-\\\\uDFCF\\\\uDFD1-\\\\uDFD5]|\\\\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]|\\\\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[\\\\uDC00-\\\\uDC6E\\\\uDC80-\\\\uDD43]|\\\\uD80B[\\\\uDF90-\\\\uDFF0]|\\\\uD80C[\\\\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]|\\\\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]|\\\\uD83C[\\\\uDD30-\\\\uDD49\\\\uDD50-\\\\uDD69\\\\uDD70-\\\\uDD89])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$CR\": \"\\\\r\",\n \"$Double_Quote\": \"(\\\"(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$ExtPict\": \"(?:[\\\\xA9\\\\xAE\\\\u203C\\\\u2049\\\\u2122\\\\u2139\\\\u2194-\\\\u2199\\\\u21A9\\\\u21AA\\\\u231A\\\\u231B\\\\u2328\\\\u2388\\\\u23CF\\\\u23E9-\\\\u23F3\\\\u23F8-\\\\u23FA\\\\u24C2\\\\u25AA\\\\u25AB\\\\u25B6\\\\u25C0\\\\u25FB-\\\\u25FE\\\\u2600-\\\\u2605\\\\u2607-\\\\u2612\\\\u2614-\\\\u2685\\\\u2690-\\\\u2705\\\\u2708-\\\\u2712\\\\u2714\\\\u2716\\\\u271D\\\\u2721\\\\u2728\\\\u2733\\\\u2734\\\\u2744\\\\u2747\\\\u274C\\\\u274E\\\\u2753-\\\\u2755\\\\u2757\\\\u2763-\\\\u2767\\\\u2795-\\\\u2797\\\\u27A1\\\\u27B0\\\\u27BF\\\\u2934\\\\u2935\\\\u2B05-\\\\u2B07\\\\u2B1B\\\\u2B1C\\\\u2B50\\\\u2B55\\\\u3030\\\\u303D\\\\u3297\\\\u3299]|\\\\uD83C[\\\\uDC00-\\\\uDCFF\\\\uDD0D-\\\\uDD0F\\\\uDD2F\\\\uDD6C-\\\\uDD71\\\\uDD7E\\\\uDD7F\\\\uDD8E\\\\uDD91-\\\\uDD9A\\\\uDDAD-\\\\uDDE5\\\\uDE01-\\\\uDE0F\\\\uDE1A\\\\uDE2F\\\\uDE32-\\\\uDE3A\\\\uDE3C-\\\\uDE3F\\\\uDE49-\\\\uDFFA]|\\\\uD83D[\\\\uDC00-\\\\uDD3D\\\\uDD46-\\\\uDE4F\\\\uDE80-\\\\uDEFF\\\\uDF74-\\\\uDF7F\\\\uDFD5-\\\\uDFFF]|\\\\uD83E[\\\\uDC0C-\\\\uDC0F\\\\uDC48-\\\\uDC4F\\\\uDC5A-\\\\uDC5F\\\\uDC88-\\\\uDC8F\\\\uDCAE-\\\\uDCFF\\\\uDD0C-\\\\uDD3A\\\\uDD3C-\\\\uDD45\\\\uDD47-\\\\uDEFF]|\\\\uD83F[\\\\uDC00-\\\\uDFFD])\",\n \"$Extend\": \"(?:[\\\\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\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0898-\\\\u089F\\\\u08CA-\\\\u08E1\\\\u08E3-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFF9E\\\\uFF9F]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCC2\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD72\\\\uDD7B-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$ExtendNumLet\": \"([_\\\\u202F\\\\u203F\\\\u2040\\\\u2054\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFF3F](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$FE\": \"(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])\",\n \"$Format\": \"(?:[\\\\xAD\\\\u0600-\\\\u0605\\\\u061C\\\\u06DD\\\\u070F\\\\u0890\\\\u0891\\\\u08E2\\\\u180E\\\\u200E\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\uFEFF\\\\uFFF9-\\\\uFFFB]|\\\\uD804[\\\\uDCBD\\\\uDCCD]|\\\\uD80D[\\\\uDC30-\\\\uDC3F]|\\\\uD82F[\\\\uDCA0-\\\\uDCA3]|\\\\uD834[\\\\uDD73-\\\\uDD7A]|\\\\uDB40\\\\uDC01)\",\n \"$Hebrew_Letter\": \"([\\\\u05D0-\\\\u05EA\\\\u05EF-\\\\u05F2\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFB4F](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Katakana\": \"((?:[\\\\u3031-\\\\u3035\\\\u309B\\\\u309C\\\\u30A0-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u31F0-\\\\u31FF\\\\u32D0-\\\\u32FE\\\\u3300-\\\\u3357\\\\uFF66-\\\\uFF9D]|\\\\uD82B[\\\\uDFF0-\\\\uDFF3\\\\uDFF5-\\\\uDFFB\\\\uDFFD\\\\uDFFE]|\\\\uD82C[\\\\uDC00\\\\uDD20-\\\\uDD22\\\\uDD55\\\\uDD64-\\\\uDD67])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$LF\": \"\\\\n\",\n \"$MidLetter\": \"([\\\\xB7\\\\u0387\\\\u055F\\\\u05F4\\\\u2027\\\\uFE13](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$MidNum\": \"([,;\\\\u037E\\\\u0589\\\\u060C\\\\u060D\\\\u066C\\\\u07F8\\\\u2044\\\\uFE10\\\\uFE14\\\\uFE50\\\\uFE54\\\\uFF0C\\\\uFF1B](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$MidNumLet\": \"([\\\\.\\\\u2018\\\\u2019\\\\u2024\\\\uFE52\\\\uFF07\\\\uFF0E](?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$MidNumLetQ\": \"(([\\\\.\\\\u2018\\\\u2019\\\\u2024\\\\uFE52\\\\uFF07\\\\uFF0E]|')(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Newline\": \"[\\\\x0B\\\\f\\\\x85\\\\u2028\\\\u2029]\",\n \"$NotBreak_\": \"(?:(?![\\\\n-\\\\r\\\\x85\\\\u2028\\\\u2029])[\\\\s\\\\S])\",\n \"$Numeric\": \"((?:[0-9\\\\u0660-\\\\u0669\\\\u066B\\\\u06F0-\\\\u06F9\\\\u07C0-\\\\u07C9\\\\u0966-\\\\u096F\\\\u09E6-\\\\u09EF\\\\u0A66-\\\\u0A6F\\\\u0AE6-\\\\u0AEF\\\\u0B66-\\\\u0B6F\\\\u0BE6-\\\\u0BEF\\\\u0C66-\\\\u0C6F\\\\u0CE6-\\\\u0CEF\\\\u0D66-\\\\u0D6F\\\\u0DE6-\\\\u0DEF\\\\u0E50-\\\\u0E59\\\\u0ED0-\\\\u0ED9\\\\u0F20-\\\\u0F29\\\\u1040-\\\\u1049\\\\u1090-\\\\u1099\\\\u17E0-\\\\u17E9\\\\u1810-\\\\u1819\\\\u1946-\\\\u194F\\\\u19D0-\\\\u19D9\\\\u1A80-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1B50-\\\\u1B59\\\\u1BB0-\\\\u1BB9\\\\u1C40-\\\\u1C49\\\\u1C50-\\\\u1C59\\\\uA620-\\\\uA629\\\\uA8D0-\\\\uA8D9\\\\uA900-\\\\uA909\\\\uA9D0-\\\\uA9D9\\\\uA9F0-\\\\uA9F9\\\\uAA50-\\\\uAA59\\\\uABF0-\\\\uABF9\\\\uFF10-\\\\uFF19]|\\\\uD801[\\\\uDCA0-\\\\uDCA9]|\\\\uD803[\\\\uDD30-\\\\uDD39]|\\\\uD804[\\\\uDC66-\\\\uDC6F\\\\uDCF0-\\\\uDCF9\\\\uDD36-\\\\uDD3F\\\\uDDD0-\\\\uDDD9\\\\uDEF0-\\\\uDEF9]|\\\\uD805[\\\\uDC50-\\\\uDC59\\\\uDCD0-\\\\uDCD9\\\\uDE50-\\\\uDE59\\\\uDEC0-\\\\uDEC9\\\\uDF30-\\\\uDF39]|\\\\uD806[\\\\uDCE0-\\\\uDCE9\\\\uDD50-\\\\uDD59]|\\\\uD807[\\\\uDC50-\\\\uDC59\\\\uDD50-\\\\uDD59\\\\uDDA0-\\\\uDDA9\\\\uDF50-\\\\uDF59]|\\\\uD81A[\\\\uDE60-\\\\uDE69\\\\uDEC0-\\\\uDEC9\\\\uDF50-\\\\uDF59]|\\\\uD835[\\\\uDFCE-\\\\uDFFF]|\\\\uD838[\\\\uDD40-\\\\uDD49\\\\uDEF0-\\\\uDEF9]|\\\\uD839[\\\\uDCF0-\\\\uDCF9]|\\\\uD83A[\\\\uDD50-\\\\uDD59]|\\\\uD83E[\\\\uDFF0-\\\\uDFF9])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$RI\": \"((?:\\\\uD83C[\\\\uDDE6-\\\\uDDFF])(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$Single_Quote\": \"('(?:[\\\\xAD\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0600-\\\\u0605\\\\u0610-\\\\u061A\\\\u061C\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DD\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u070F\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u07FD\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u0890\\\\u0891\\\\u0898-\\\\u089F\\\\u08CA-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u09FE\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0AFA-\\\\u0AFF\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B55-\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C04\\\\u0C3C\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0CF3\\\\u0D00-\\\\u0D03\\\\u0D3B\\\\u0D3C\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D81-\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EBC\\\\u0EC8-\\\\u0ECE\\\\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-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180F\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ACE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF4\\\\u1CF7-\\\\u1CF9\\\\u1DC0-\\\\u1DFF\\\\u200C-\\\\u200F\\\\u202A-\\\\u202E\\\\u2060-\\\\u2064\\\\u2066-\\\\u206F\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA82C\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA8FF\\\\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-\\\\uFE2F\\\\uFEFF\\\\uFF9E\\\\uFF9F\\\\uFFF9-\\\\uFFFB]|\\\\uD800[\\\\uDDFD\\\\uDEE0\\\\uDF76-\\\\uDF7A]|\\\\uD802[\\\\uDE01-\\\\uDE03\\\\uDE05\\\\uDE06\\\\uDE0C-\\\\uDE0F\\\\uDE38-\\\\uDE3A\\\\uDE3F\\\\uDEE5\\\\uDEE6]|\\\\uD803[\\\\uDD24-\\\\uDD27\\\\uDEAB\\\\uDEAC\\\\uDEFD-\\\\uDEFF\\\\uDF46-\\\\uDF50\\\\uDF82-\\\\uDF85]|\\\\uD804[\\\\uDC00-\\\\uDC02\\\\uDC38-\\\\uDC46\\\\uDC70\\\\uDC73\\\\uDC74\\\\uDC7F-\\\\uDC82\\\\uDCB0-\\\\uDCBA\\\\uDCBD\\\\uDCC2\\\\uDCCD\\\\uDD00-\\\\uDD02\\\\uDD27-\\\\uDD34\\\\uDD45\\\\uDD46\\\\uDD73\\\\uDD80-\\\\uDD82\\\\uDDB3-\\\\uDDC0\\\\uDDC9-\\\\uDDCC\\\\uDDCE\\\\uDDCF\\\\uDE2C-\\\\uDE37\\\\uDE3E\\\\uDE41\\\\uDEDF-\\\\uDEEA\\\\uDF00-\\\\uDF03\\\\uDF3B\\\\uDF3C\\\\uDF3E-\\\\uDF44\\\\uDF47\\\\uDF48\\\\uDF4B-\\\\uDF4D\\\\uDF57\\\\uDF62\\\\uDF63\\\\uDF66-\\\\uDF6C\\\\uDF70-\\\\uDF74]|\\\\uD805[\\\\uDC35-\\\\uDC46\\\\uDC5E\\\\uDCB0-\\\\uDCC3\\\\uDDAF-\\\\uDDB5\\\\uDDB8-\\\\uDDC0\\\\uDDDC\\\\uDDDD\\\\uDE30-\\\\uDE40\\\\uDEAB-\\\\uDEB7\\\\uDF1D-\\\\uDF2B]|\\\\uD806[\\\\uDC2C-\\\\uDC3A\\\\uDD30-\\\\uDD35\\\\uDD37\\\\uDD38\\\\uDD3B-\\\\uDD3E\\\\uDD40\\\\uDD42\\\\uDD43\\\\uDDD1-\\\\uDDD7\\\\uDDDA-\\\\uDDE0\\\\uDDE4\\\\uDE01-\\\\uDE0A\\\\uDE33-\\\\uDE39\\\\uDE3B-\\\\uDE3E\\\\uDE47\\\\uDE51-\\\\uDE5B\\\\uDE8A-\\\\uDE99]|\\\\uD807[\\\\uDC2F-\\\\uDC36\\\\uDC38-\\\\uDC3F\\\\uDC92-\\\\uDCA7\\\\uDCA9-\\\\uDCB6\\\\uDD31-\\\\uDD36\\\\uDD3A\\\\uDD3C\\\\uDD3D\\\\uDD3F-\\\\uDD45\\\\uDD47\\\\uDD8A-\\\\uDD8E\\\\uDD90\\\\uDD91\\\\uDD93-\\\\uDD97\\\\uDEF3-\\\\uDEF6\\\\uDF00\\\\uDF01\\\\uDF03\\\\uDF34-\\\\uDF3A\\\\uDF3E-\\\\uDF42]|\\\\uD80D[\\\\uDC30-\\\\uDC40\\\\uDC47-\\\\uDC55]|\\\\uD81A[\\\\uDEF0-\\\\uDEF4\\\\uDF30-\\\\uDF36]|\\\\uD81B[\\\\uDF4F\\\\uDF51-\\\\uDF87\\\\uDF8F-\\\\uDF92\\\\uDFE4\\\\uDFF0\\\\uDFF1]|\\\\uD82F[\\\\uDC9D\\\\uDC9E\\\\uDCA0-\\\\uDCA3]|\\\\uD833[\\\\uDF00-\\\\uDF2D\\\\uDF30-\\\\uDF46]|\\\\uD834[\\\\uDD65-\\\\uDD69\\\\uDD6D-\\\\uDD82\\\\uDD85-\\\\uDD8B\\\\uDDAA-\\\\uDDAD\\\\uDE42-\\\\uDE44]|\\\\uD836[\\\\uDE00-\\\\uDE36\\\\uDE3B-\\\\uDE6C\\\\uDE75\\\\uDE84\\\\uDE9B-\\\\uDE9F\\\\uDEA1-\\\\uDEAF]|\\\\uD838[\\\\uDC00-\\\\uDC06\\\\uDC08-\\\\uDC18\\\\uDC1B-\\\\uDC21\\\\uDC23\\\\uDC24\\\\uDC26-\\\\uDC2A\\\\uDC8F\\\\uDD30-\\\\uDD36\\\\uDEAE\\\\uDEEC-\\\\uDEEF]|\\\\uD839[\\\\uDCEC-\\\\uDCEF]|\\\\uD83A[\\\\uDCD0-\\\\uDCD6\\\\uDD44-\\\\uDD4A]|\\\\uD83C[\\\\uDFFB-\\\\uDFFF]|\\\\uDB40[\\\\uDC01\\\\uDC20-\\\\uDC7F\\\\uDD00-\\\\uDDEF])*)\",\n \"$WSegSpace\": \"[ \\\\u1680\\\\u2000-\\\\u2006\\\\u2008-\\\\u200A\\\\u205F\\\\u3000]\",\n \"$ZWJ\": \"\\\\u200D\"\n }\n }\n },\n \"ru\": {\n \"sentence\": {\n \"segmentRules\": {},\n \"suppressions\": [\n \"руб.\",\n \"янв.\",\n \"до н. э.\",\n \"сент.\",\n \"тел.\",\n \"дек.\",\n \"февр.\",\n \"нояб.\",\n \"апр.\",\n \"н. э.\",\n \"окт.\",\n \"тыс.\",\n \"авг.\",\n \"проф.\",\n \"н.э.\",\n \"кв.\",\n \"ул.\",\n \"отд.\"\n ],\n \"variables\": {}\n }\n },\n \"zh\": {}\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isSurrogate = exports.replaceVariables = void 0;\nvar replaceVariables = function (variables, input) {\n var findVarRegex = /\\$[A-Za-z0-9_]+/gm;\n return input.replaceAll(findVarRegex, function (match) {\n if (!(match in variables)) {\n throw new Error(\"No such variable \".concat(match));\n }\n return variables[match];\n });\n};\nexports.replaceVariables = replaceVariables;\nvar isSurrogate = function (str, pos) {\n return (0xd800 <= str.charCodeAt(pos - 1) &&\n str.charCodeAt(pos - 1) <= 0xdbff &&\n 0xdc00 <= str.charCodeAt(pos) &&\n str.charCodeAt(pos) <= 0xdfff);\n};\nexports.isSurrogate = isSurrogate;\n// alternative surrogate check mimicking the java implementation\n// const TRAIL_SURROGATE_BITMASK = 0xfffffc00\n// const TRAIL_SURROGATE_BITS = 0xdc00\n// const LEAD_SURROGATE_BITMASK = 0xfffffc00\n// const LEAD_SURROGATE_BITS = 0xd800\n// const isSurrogate = (text: string, position: number) => {\n// if (\n// (text.charCodeAt(position - 1) & LEAD_SURROGATE_BITMASK) ==\n// LEAD_SURROGATE_BITS &&\n// (text.charCodeAt(position) & TRAIL_SURROGATE_BITMASK) ==\n// TRAIL_SURROGATE_BITS\n// ) {\n// return true\n// } else {\n// return false\n// }\n// }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Segmenter = void 0;\nvar tslib_1 = require(\"tslib\");\nvar cldr_segmentation_rules_generated_1 = require(\"./cldr-segmentation-rules.generated\");\nvar segmentation_utils_1 = require(\"./segmentation-utils\");\nvar ecma402_abstract_1 = require(\"@formatjs/ecma402-abstract\");\nvar intl_localematcher_1 = require(\"@formatjs/intl-localematcher\");\n/**\n * Adds $ to before rules and ^ to after rules for strickness\n * Replaces variables\n * Initializes the RegExp\n *\n * @param rule raw rule string from cldr-segmentation-rules.generated\n * @param variables\n * @param after appends ^ if true and $ if false\n * @returns\n */\nvar generateRuleRegex = function (rule, variables, after) {\n return new RegExp(\"\".concat(after ? '^' : '').concat((0, segmentation_utils_1.replaceVariables)(variables, rule)).concat(after ? '' : '$'));\n};\nvar prepareLocaleSegmentationRules = function (segmentationTypeValue) {\n var preparedRules = {};\n for (var _i = 0, _a = Object.keys(segmentationTypeValue.segmentRules); _i < _a.length; _i++) {\n var ruleNr = _a[_i];\n var ruleValue = segmentationTypeValue.segmentRules[ruleNr];\n var preparedRule = {\n breaks: ruleValue.breaks,\n };\n if ('before' in ruleValue && ruleValue.before) {\n preparedRule.before = generateRuleRegex(ruleValue.before, segmentationTypeValue.variables, false);\n }\n if ('after' in ruleValue && ruleValue.after) {\n preparedRule.after = generateRuleRegex(ruleValue.after, segmentationTypeValue.variables, true);\n }\n preparedRules[ruleNr] = preparedRule;\n }\n return preparedRules;\n};\nvar breaksAtResult = function (breaks, matchingRule) { return ({\n breaks: breaks,\n matchingRule: matchingRule,\n}); };\nvar Segmenter = /** @class */ (function () {\n function Segmenter(locales, options) {\n var _newTarget = this.constructor;\n if (_newTarget === undefined) {\n throw TypeError(\"Constructor Intl.Segmenter requires 'new'\");\n }\n var requestedLocales = (0, ecma402_abstract_1.CanonicalizeLocaleList)(locales);\n options = (0, ecma402_abstract_1.GetOptionsObject)(options);\n var opt = Object.create(null);\n var matcher = (0, ecma402_abstract_1.GetOption)(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');\n opt.localeMatcher = matcher;\n var granularity = (0, ecma402_abstract_1.GetOption)(options, 'granularity', 'string', ['word', 'sentence', 'grapheme'], 'grapheme');\n setSlot(this, 'granularity', granularity);\n //TODO: figure out correct availible locales\n var r = (0, intl_localematcher_1.ResolveLocale)(Segmenter.availableLocales, //availible locales\n requestedLocales, opt, [], // there is no relevantExtensionKeys\n {}, function () { return ''; } //use only root rules\n );\n setSlot(this, 'locale', r.locale);\n //root rules based on granularity\n this.mergedSegmentationTypeValue = cldr_segmentation_rules_generated_1.SegmentationRules.root[granularity];\n //merge root rules with locale ones if locale is specified\n if (r.locale.length) {\n var localeOverrides = cldr_segmentation_rules_generated_1.SegmentationRules[r.locale];\n if (granularity in localeOverrides) {\n var localeSegmentationTypeValue = localeOverrides[granularity];\n this.mergedSegmentationTypeValue.variables = tslib_1.__assign(tslib_1.__assign({}, this.mergedSegmentationTypeValue.variables), localeSegmentationTypeValue.variables);\n this.mergedSegmentationTypeValue.segmentRules = tslib_1.__assign(tslib_1.__assign({}, this.mergedSegmentationTypeValue.segmentRules), localeSegmentationTypeValue.segmentRules);\n this.mergedSegmentationTypeValue.suppressions = tslib_1.__spreadArray(tslib_1.__spreadArray([], this.mergedSegmentationTypeValue.suppressions, true), localeSegmentationTypeValue.suppressions, true);\n }\n }\n //prepare rules\n this.rules = prepareLocaleSegmentationRules(this.mergedSegmentationTypeValue);\n //order rule keys\n this.ruleSortedKeys = Object.keys(this.rules).sort(function (a, b) { return Number(a) - Number(b); });\n }\n Segmenter.prototype.breaksAt = function (position, input) {\n var ruleSortedKeys = this.ruleSortedKeys;\n var rules = this.rules;\n var mergedSegmentationTypeValue = this.mergedSegmentationTypeValue;\n //artificial rule 0.2\n if (position === 0) {\n return breaksAtResult(true, '0.2');\n }\n if (position === input.length) {\n //rule 0.3\n return breaksAtResult(true, '0.3');\n }\n //artificial rule 0.1: js specific, due to es5 regex not being unicode aware\n //number 0.1 chosen to mimic java implementation, but needs to execute after 0.2 and 0.3 to be inside the string bounds\n if ((0, segmentation_utils_1.isSurrogate)(input, position)) {\n return breaksAtResult(false, '0.1');\n }\n var stringBeforeBreak = input.substring(0, position);\n var stringAfterBreak = input.substring(position);\n //artificial rule 0.4: handle suppressions\n if ('suppressions' in mergedSegmentationTypeValue) {\n for (var _i = 0, _a = mergedSegmentationTypeValue.suppressions; _i < _a.length; _i++) {\n var suppressions = _a[_i];\n if (stringBeforeBreak.trim().endsWith(suppressions)) {\n return breaksAtResult(false, '0.4');\n }\n }\n }\n // loop through rules and find a match\n for (var _b = 0, ruleSortedKeys_1 = ruleSortedKeys; _b < ruleSortedKeys_1.length; _b++) {\n var ruleKey = ruleSortedKeys_1[_b];\n var _c = rules[ruleKey], before = _c.before, after = _c.after, breaks = _c.breaks;\n // for debugging\n // if (ruleKey === '16' && position === 4) {\n // console.log({before, after, stringBeforeBreak, stringAfterBreak})\n // }\n if (before) {\n if (!before.test(stringBeforeBreak)) {\n //didn't match the before part, therfore skipping\n continue;\n }\n }\n if (after) {\n if (!after.test(stringAfterBreak)) {\n //didn't match the after part, therfore skipping\n continue;\n }\n }\n return breaksAtResult(breaks, ruleKey);\n }\n //artificial rule 999: if no rule matched is Any ÷ Any so return true\n return breaksAtResult(true, '999');\n };\n Segmenter.prototype.segment = function (input) {\n checkReceiver(this, 'segment');\n return new SegmentIterator(this, input);\n };\n Segmenter.prototype.resolvedOptions = function () {\n checkReceiver(this, 'resolvedOptions');\n return tslib_1.__assign({}, (0, ecma402_abstract_1.getMultiInternalSlots)(__INTERNAL_SLOT_MAP__, this, 'locale', 'granularity'));\n };\n Segmenter.supportedLocalesOf = function (locales, options) {\n return (0, ecma402_abstract_1.SupportedLocales)(Segmenter.availableLocales, (0, ecma402_abstract_1.CanonicalizeLocaleList)(locales), options);\n };\n Segmenter.availableLocales = new Set(Object.keys(cldr_segmentation_rules_generated_1.SegmentationRules).filter(function (key) { return key !== 'root'; }));\n Segmenter.polyfilled = true;\n return Segmenter;\n}());\nexports.Segmenter = Segmenter;\nvar createSegmentDataObject = function (segmenter, segment, index, input, matchingRule) {\n var returnValue = {\n segment: segment,\n index: index,\n input: input,\n };\n if (getSlot(segmenter, 'granularity') === 'word') {\n returnValue.isWordLike = matchingRule !== '3.1' && matchingRule !== '3.2';\n }\n return returnValue;\n};\nvar SegmentIterator = /** @class */ (function () {\n function SegmentIterator(segmenter, input) {\n this.segmenter = segmenter;\n this.lastSegmentIndex = 0;\n if (typeof input == 'symbol') {\n throw TypeError(\"Input must not be a symbol\");\n }\n this.input = String(input);\n }\n SegmentIterator.prototype[Symbol.iterator] = function () {\n return new SegmentIterator(this.segmenter, this.input);\n };\n SegmentIterator.prototype.next = function () {\n //using only the relevant bit of the string\n var checkString = this.input.substring(this.lastSegmentIndex);\n //loop from the start of the checkString, until exactly length (breaksAt returns break at pos=== lenght)\n for (var position = 1; position <= checkString.length; position++) {\n var _a = this.segmenter.breaksAt(position, checkString), breaks = _a.breaks, matchingRule = _a.matchingRule;\n if (breaks) {\n var segment = checkString.substring(0, position);\n var index = this.lastSegmentIndex;\n this.lastSegmentIndex += position;\n return {\n done: false,\n value: createSegmentDataObject(this.segmenter, segment, index, this.input, matchingRule),\n };\n }\n }\n //no segment was found by the loop, therefore the segmentation is done\n return { done: true, value: undefined };\n };\n SegmentIterator.prototype.containing = function (positionInput) {\n if (typeof positionInput === 'bigint') {\n throw TypeError('Index must not be a BigInt');\n }\n var position = Number(positionInput);\n //https://tc39.es/ecma262/#sec-tointegerorinfinity\n // 2. If number is NaN, +0𝔽, or -0𝔽, return 0.\n if (isNaN(position) || !position) {\n position = 0;\n }\n // 5. Let integer be floor(abs(ℝ(number))).\n // 6. If number < -0𝔽, set integer to -integer.\n position = Math.floor(Math.abs(position)) * (position < 0 ? -1 : 1);\n if (position < 0 || position >= this.input.length) {\n return undefined;\n }\n //find previous break point\n var previousBreakPoint = 0;\n if (position === 0) {\n previousBreakPoint = 0;\n }\n else {\n var checkString_1 = this.input;\n for (var cursor = position; cursor >= 0; cursor--) {\n var breaks = this.segmenter.breaksAt(cursor, checkString_1).breaks;\n if (breaks) {\n previousBreakPoint = cursor;\n break;\n }\n }\n }\n var checkString = this.input.substring(previousBreakPoint);\n //find next break point\n for (var cursor = 1; cursor <= checkString.length; cursor++) {\n var _a = this.segmenter.breaksAt(cursor, checkString), breaks = _a.breaks, matchingRule = _a.matchingRule;\n if (breaks) {\n var segment = checkString.substring(0, cursor);\n return createSegmentDataObject(this.segmenter, segment, previousBreakPoint, this.input, matchingRule);\n }\n }\n };\n return SegmentIterator;\n}());\nvar __INTERNAL_SLOT_MAP__ = new WeakMap();\nfunction getSlot(instance, key) {\n return (0, ecma402_abstract_1.getInternalSlot)(__INTERNAL_SLOT_MAP__, instance, key);\n}\nfunction setSlot(instance, key, value) {\n (0, ecma402_abstract_1.setInternalSlot)(__INTERNAL_SLOT_MAP__, instance, key, value);\n}\nfunction checkReceiver(receiver, methodName) {\n if (!(receiver instanceof Segmenter)) {\n throw TypeError(\"Method Intl.Segmenter.prototype.\".concat(methodName, \" called on incompatible receiver\"));\n }\n}\ntry {\n // IE11 does not have Symbol\n if (typeof Symbol !== 'undefined') {\n Object.defineProperty(Segmenter.prototype, Symbol.toStringTag, {\n value: 'Intl.Segmenter',\n writable: false,\n enumerable: false,\n configurable: true,\n });\n }\n //github.com/tc39/test262/blob/main/test/intl402/Segmenter/constructor/length.js\n https: Object.defineProperty(Segmenter.prototype.constructor, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n // https://github.com/tc39/test262/blob/main/test/intl402/Segmenter/constructor/supportedLocalesOf/length.js\n Object.defineProperty(Segmenter.supportedLocalesOf, 'length', {\n value: 1,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n}\ncatch (e) {\n // Meta fix so we're test262-compliant, not important\n}\n","/**\n * @copyright 2015-2022 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n *

Supports conversion of user keyboard input to formatted text:

\n *
    \n *
  • *abc* → abc
  • \n *
  • _abc_ → abc
  • \n *
  • ~abc~ → abc
  • \n *
  • `abc` → abc
  • \n *
\n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n *
\n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * 
\n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst JSON_MIME_TYPE = 'application/json';\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
',\n close: _ => '
'\n },\n // Row: logic grouping of elements\n RW: {\n open: _ => '
',\n close: _ => '
'\n },\n // Quoted block.\n QQ: {\n open: _ => '
',\n close: _ => '
',\n props: (data) => {\n return data ? {} : null;\n },\n },\n // Video call\n VC: {\n open: _ => '
',\n close: _ => '
',\n props: data => {\n if (!data) return {};\n return {\n 'data-duration': data.duration,\n 'data-state': data.state,\n };\n }\n },\n // Video.\n VD: {\n open: data => {\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return '';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n getCorrectLengthsWhenTreatedAsGrapheme(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = getGraphemesFromString(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n getCorrectLengthsWhenTreatedAsGrapheme(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n getCorrectLengthsWhenTreatedAsGrapheme(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = getGraphemesFromString(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: getGraphemesFromString(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: getGraphemesFromString(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: JSON_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: getGraphemesFromString(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup.\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (entData.mime != JSON_MIME_TYPE && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > getGraphemesFromString(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = getGraphemesFromString(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = getGraphemesFromString(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = getGraphemesFromString(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = getGraphemesFromString(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (c.data['mime'] == JSON_MIME_TYPE) {\n // JSON attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array(len equal to og string) such that each index \n// denotes the position of char in string in a grapheme array(created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction getGraphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster\n charIndex += segment.length;\n\n // Increment the grapheme index\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Returns correct offset and length, given the wrong offset, graphemes and og string \nfunction getCorrectLengthsWhenTreatedAsGrapheme(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = getGraphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen =\n fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt :\n fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Returns graphme cluster array from string\nfunction getGraphemesFromString(input) {\n return Array.from(segmenter.segment(input));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","export const PACKAGE_VERSION = \"0.22.12\";\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2023 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.21';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Ignore properties where ignore[property] is true.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src, ignore) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return src;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (!ignore || !ignore[prop]) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n // FIXME: probably need to log something here.\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval, ignore) {\n cache[key] = mergeObj(cache[key], newval, ignore);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, strip empty and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out.sort().filter(function(item, pos, ary) {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Settings for exponential backoff\nconst _BOFF_BASE = 2000; // 2000 milliseconds, minimum delay between reconnects\nconst _BOFF_MAX_ITER = 10; // Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes\nconst _BOFF_JITTER = 0.3; // Add random delay\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = _BOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _BOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= _BOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) { // 1 == OPENED\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 1;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n // Object store (table) for topics. The primary key is topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n };\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = (event) => {\n resolve(event.target.result);\n };\n trx.onerror = (event) => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {Object} query - parameters of the message range to retrieve.\n * @param {number=} query.since - the least message ID to retrieve (inclusive).\n * @param {number=} query.before - the greatest message ID to retrieve (exclusive).\n * @param {number=} query.limit - the maximum number of messages to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n query = query || {};\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n const result = [];\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n const trx = this.db.transaction(['message']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev').onsuccess = (event) => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'read', 'recv', 'seq', 'clear', 'defacs',\n 'creds', 'public', 'trusted', 'private', 'touched', '_deleted'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2022 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.20\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport '@formatjs/intl-segmenter/polyfill'\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n Topic,\n TopicMe,\n TopicFnd\n} from './topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format /\n this._appName = config.appName || \"Undefined\";\n\n // API Key.\n this._apiKey = config.apiKey;\n\n // Name and version of the browser.\n this._platform = config.platform || 'web';\n // Underlying OS.\n if (typeof navigator != 'undefined') {\n this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n this._hwos = navigator.platform;\n // This is the default language. It could be changed by client.\n this._humanLanguage = navigator.language || 'en-US';\n }\n\n Connection.logger = this.logger;\n Drafty.logger = this.logger;\n\n // WebSocket or long polling network connection.\n if (config.transport != 'lp' && config.transport != 'ws') {\n config.transport = detectTransport();\n }\n this._connection = new Connection(config, Const.PROTOCOL_VERSION, /* autoreconnect */ true);\n this._connection.onMessage = (data) => {\n // Call the main message dispatcher.\n this.#dispatchMessage(data);\n }\n\n // Ready to start sending.\n this._connection.onOpen = _ => this.#connectionOpen();\n this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n\n // Wrapper for the reconnect iterator callback.\n this._connection.onAutoreconnectIteration = (timeout, promise) => {\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout, promise);\n }\n }\n\n this._persist = config.persist;\n // Initialize object regardless. It simplifies the code.\n this._db = new DBCache(err => {\n this.logger('DB', err);\n }, this.logger);\n\n if (this._persist) {\n // Create the persistent cache.\n // Store promises to be resolved when messages load into memory.\n const prom = [];\n this._db.initDatabase().then(_ => {\n // First load topics into memory.\n return this._db.mapTopics((data) => {\n let topic = this.#cacheGet('topic', data.name);\n if (topic) {\n return;\n }\n if (data.name == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (data.name == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(data.name);\n }\n this._db.deserializeTopic(topic, data);\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Topic loaded from DB is not new.\n delete topic._new;\n // Request to load messages and save the promise.\n prom.push(topic._loadMessages(this._db));\n });\n }).then(_ => {\n // Then load users.\n return this._db.mapUsers((data) => {\n this.#cachePut('user', data.uid, mergeObj({}, data.public));\n });\n }).then(_ => {\n // Now wait for all messages to finish loading.\n return Promise.all(prom);\n }).then(_ => {\n if (onComplete) {\n onComplete();\n }\n this.logger(\"Persistent cache initialized.\");\n }).catch(err => {\n if (onComplete) {\n onComplete(err);\n }\n this.logger(\"Failed to initialize persistent cache:\", err);\n });\n } else {\n this._db.deleteDatabase().then(_ => {\n if (onComplete) {\n onComplete();\n }\n });\n }\n }\n\n // Private methods.\n\n // Console logger. Babel somehow fails to parse '...rest' parameter.\n logger(str, ...args) {\n if (this._loggingEnabled) {\n const d = new Date();\n const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' +\n ('0' + d.getUTCMinutes()).slice(-2) + ':' +\n ('0' + d.getUTCSeconds()).slice(-2) + '.' +\n ('00' + d.getUTCMilliseconds()).slice(-3);\n\n console.log('[' + dateString + ']', str, args.join(' '));\n }\n }\n\n // Generator of default promises for sent packets.\n #makePromise(id) {\n let promise = null;\n if (id) {\n promise = new Promise((resolve, reject) => {\n // Stored callbacks will be called when the response packet with this Id arrives\n this._pendingPromises[id] = {\n 'resolve': resolve,\n 'reject': reject,\n 'ts': new Date()\n };\n });\n }\n return promise;\n };\n\n // Resolve or reject a pending promise.\n // Unresolved promises are stored in _pendingPromises.\n #execPromise(id, code, onOK, errorText) {\n const callbacks = this._pendingPromises[id];\n if (callbacks) {\n delete this._pendingPromises[id];\n if (code >= 200 && code < 400) {\n if (callbacks.resolve) {\n callbacks.resolve(onOK);\n }\n } else if (callbacks.reject) {\n callbacks.reject(new CommError(errorText, code));\n }\n }\n }\n\n // Send a packet. If packet id is provided return a promise.\n #send(pkt, id) {\n let promise;\n if (id) {\n promise = this.#makePromise(id);\n }\n pkt = simplify(pkt);\n let msg = JSON.stringify(pkt);\n this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n try {\n this._connection.sendText(msg);\n } catch (err) {\n // If sendText throws, wrap the error in a promise or rethrow.\n if (id) {\n this.#execPromise(id, Connection.NETWORK_ERROR, null, err.message);\n } else {\n throw err;\n }\n }\n return promise;\n }\n\n // The main message dispatcher.\n #dispatchMessage(data) {\n // Skip empty response. This happens when LP times out.\n if (!data)\n return;\n\n this._inPacketCount++;\n\n // Send raw message to listener\n if (this.onRawMessage) {\n this.onRawMessage(data);\n }\n\n if (data === '0') {\n // Server response to a network probe.\n if (this.onNetworkProbe) {\n this.onNetworkProbe();\n }\n // No processing is necessary.\n return;\n }\n\n let pkt = JSON.parse(data, jsonParseHelper);\n if (!pkt) {\n this.logger(\"in: \" + data);\n this.logger(\"ERROR: failed to parse data\");\n } else {\n this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n\n // Send complete packet to listener\n if (this.onMessage) {\n this.onMessage(pkt);\n }\n\n if (pkt.ctrl) {\n // Handling {ctrl} message\n if (this.onCtrlMessage) {\n this.onCtrlMessage(pkt.ctrl);\n }\n\n // Resolve or reject a pending promise, if any\n if (pkt.ctrl.id) {\n this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n }\n setTimeout(_ => {\n if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n // User evicted from topic.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._resetSub();\n if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n topic._gone();\n }\n }\n } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n if (pkt.ctrl.params.what == 'data') {\n // code=208, all messages received: \"params\":{\"count\":11,\"what\":\"data\"},\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._allMessagesReceived(pkt.ctrl.params.count);\n }\n } else if (pkt.ctrl.params.what == 'sub') {\n // code=204, the topic has no (refreshed) subscriptions.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n // Trigger topic.onSubsUpdated.\n topic._processMetaSubs([]);\n }\n }\n }\n }, 0);\n } else {\n setTimeout(_ => {\n if (pkt.meta) {\n // Handling a {meta} message.\n // Preferred API: Route meta to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.meta.topic);\n if (topic) {\n topic._routeMeta(pkt.meta);\n }\n\n if (pkt.meta.id) {\n this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n }\n\n // Secondary API: callback\n if (this.onMetaMessage) {\n this.onMetaMessage(pkt.meta);\n }\n } else if (pkt.data) {\n // Handling {data} message\n // Preferred API: Route data to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.data.topic);\n if (topic) {\n topic._routeData(pkt.data);\n }\n\n // Secondary API: Call callback\n if (this.onDataMessage) {\n this.onDataMessage(pkt.data);\n }\n } else if (pkt.pres) {\n // Handling {pres} message\n // Preferred API: Route presence to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.pres.topic);\n if (topic) {\n topic._routePres(pkt.pres);\n }\n\n // Secondary API - callback\n if (this.onPresMessage) {\n this.onPresMessage(pkt.pres);\n }\n } else if (pkt.info) {\n // {info} message - read/received notifications and key presses\n // Preferred API: Route {info}} to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.info.topic);\n if (topic) {\n topic._routeInfo(pkt.info);\n }\n\n // Secondary API - callback\n if (this.onInfoMessage) {\n this.onInfoMessage(pkt.info);\n }\n } else {\n this.logger(\"ERROR: Unknown packet received.\");\n }\n }, 0);\n }\n }\n }\n\n // Connection open, ready to start sending.\n #connectionOpen() {\n if (!this._expirePromises) {\n // Reject promises which have not been resolved for too long.\n this._expirePromises = setInterval(_ => {\n const err = new CommError(\"timeout\", 504);\n const expires = new Date(new Date().getTime() - Const.EXPIRE_PROMISES_TIMEOUT);\n for (let id in this._pendingPromises) {\n let callbacks = this._pendingPromises[id];\n if (callbacks && callbacks.ts < expires) {\n this.logger(\"Promise expired\", id);\n delete this._pendingPromises[id];\n if (callbacks.reject) {\n callbacks.reject(err);\n }\n }\n }\n }, Const.EXPIRE_PROMISES_PERIOD);\n }\n this.hello();\n }\n\n #disconnected(err, code) {\n this._inPacketCount = 0;\n this._serverInfo = null;\n this._authenticated = false;\n\n if (this._expirePromises) {\n clearInterval(this._expirePromises);\n this._expirePromises = null;\n }\n\n // Mark all topics as unsubscribed\n this.#cacheMap('topic', (topic, key) => {\n topic._resetSub();\n });\n\n // Reject all pending promises\n for (let key in this._pendingPromises) {\n const callbacks = this._pendingPromises[key];\n if (callbacks && callbacks.reject) {\n callbacks.reject(err);\n }\n }\n this._pendingPromises = {};\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n }\n\n // Get User Agent string\n #getUserAgent() {\n return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + Const.LIBRARY;\n }\n\n // Generator of packets stubs\n #initPacket(type, topic) {\n switch (type) {\n case 'hi':\n return {\n 'hi': {\n 'id': this.getNextUniqueId(),\n 'ver': Const.VERSION,\n 'ua': this.#getUserAgent(),\n 'dev': this._deviceToken,\n 'lang': this._humanLanguage,\n 'platf': this._platform\n }\n };\n\n case 'acc':\n return {\n 'acc': {\n 'id': this.getNextUniqueId(),\n 'user': null,\n 'scheme': null,\n 'secret': null,\n 'tmpscheme': null,\n 'tmpsecret': null,\n 'login': false,\n 'tags': null,\n 'desc': {},\n 'cred': {}\n }\n };\n\n case 'login':\n return {\n 'login': {\n 'id': this.getNextUniqueId(),\n 'scheme': null,\n 'secret': null\n }\n };\n\n case 'sub':\n return {\n 'sub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'set': {},\n 'get': {}\n }\n };\n\n case 'leave':\n return {\n 'leave': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'unsub': false\n }\n };\n\n case 'pub':\n return {\n 'pub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'noecho': false,\n 'head': null,\n 'content': {}\n }\n };\n\n case 'get':\n return {\n 'get': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'desc': {},\n 'sub': {},\n 'data': {}\n }\n };\n\n case 'set':\n return {\n 'set': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'desc': {},\n 'sub': {},\n 'tags': [],\n 'ephemeral': {}\n }\n };\n\n case 'del':\n return {\n 'del': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'delseq': null,\n 'user': null,\n 'hard': false\n }\n };\n\n case 'note':\n return {\n 'note': {\n // no id by design (except calls).\n 'topic': topic,\n 'what': null, // one of \"recv\", \"read\", \"kp\", \"call\"\n 'seq': undefined // the server-side message id acknowledged as received or read.\n }\n };\n\n default:\n throw new Error(`Unknown packet type requested: ${type}`);\n }\n }\n\n // Cache management\n #cachePut(type, name, obj) {\n this._cache[type + ':' + name] = obj;\n }\n #cacheGet(type, name) {\n return this._cache[type + ':' + name];\n }\n #cacheDel(type, name) {\n delete this._cache[type + ':' + name];\n }\n\n // Enumerate all items in cache, call func for each item.\n // Enumeration stops if func returns true.\n #cacheMap(type, func, context) {\n const key = type ? type + ':' : undefined;\n for (let idx in this._cache) {\n if (!key || idx.indexOf(key) == 0) {\n if (func.call(context, this._cache[idx], idx)) {\n break;\n }\n }\n }\n }\n\n // Make limited cache management available to topic.\n // Caching user.public only. Everything else is per-topic.\n #attachCacheToTopic(topic) {\n topic._tinode = this;\n\n topic._cacheGetUser = (uid) => {\n const pub = this.#cacheGet('user', uid);\n if (pub) {\n return {\n user: uid,\n public: mergeObj({}, pub)\n };\n }\n return undefined;\n };\n topic._cachePutUser = (uid, user) => {\n this.#cachePut('user', uid, mergeObj({}, user.public));\n };\n topic._cacheDelUser = (uid) => {\n this.#cacheDel('user', uid);\n };\n topic._cachePutSelf = _ => {\n this.#cachePut('topic', topic.name, topic);\n };\n topic._cacheDelSelf = _ => {\n this.#cacheDel('topic', topic.name);\n };\n }\n\n // On successful login save server-provided data.\n #loginSuccessful(ctrl) {\n if (!ctrl.params || !ctrl.params.user) {\n return ctrl;\n }\n // This is a response to a successful login,\n // extract UID and security token, save it in Tinode module\n this._myUID = ctrl.params.user;\n this._authenticated = (ctrl && ctrl.code >= 200 && ctrl.code < 300);\n if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n this._authToken = {\n token: ctrl.params.token,\n expires: ctrl.params.expires\n };\n } else {\n this._authToken = null;\n }\n\n if (this.onLogin) {\n this.onLogin(ctrl.code, ctrl.text);\n }\n\n return ctrl;\n }\n\n // Static methods.\n /**\n * Helper method to package account credential.\n *\n * @param {string | Credential} meth - validation method or object with validation data.\n * @param {string=} val - validation value (e.g. email or phone number).\n * @param {Object=} params - validation parameters.\n * @param {string=} resp - validation response.\n *\n * @returns {Array.} array with a single credential or null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.} tags - array of string tags for user discovery.\n * @property {string} scheme - Temporary authentication scheme for password reset.\n * @property {string} secret - Temporary authentication secret for password reset.\n * @property {Array.=} attachments - Array of references to out of band attachments used in account description.\n */\n /**\n * @typedef DefAcs\n * @type {Object}\n * @property {string=} auth - Access mode for me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.=} attachments - URLs of out of band attachments used in parameters.\n */\n /**\n * @typedef SetDesc\n * @type {Object}\n * @property {DefAcs=} defacs - Default access mode.\n * @property {Object=} public - Free-form topic description, publically accessible.\n * @property {Object=} private - Free-form topic description accessible only to the owner.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n */\n /**\n * @typedef SetSub\n * @type {Object}\n * @property {string=} user - UID of the user affected by the request. Default (empty) - current user.\n * @property {string=} mode - User access mode, either requested or assigned dependent on context.\n */\n /**\n * Send a topic subscription request.\n *\n * @param {string} topic - Name of the topic to subscribe to.\n * @param {GetQuery=} getParams - Optional subscription metadata query\n * @param {SetParams=} setParams - Optional initialization parameters\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n subscribe(topicName, getParams, setParams) {\n const pkt = this.#initPacket('sub', topicName)\n if (!topicName) {\n topicName = Const.TOPIC_NEW;\n }\n\n pkt.sub.get = getParams;\n\n if (setParams) {\n if (setParams.sub) {\n pkt.sub.set.sub = setParams.sub;\n }\n\n if (setParams.desc) {\n const desc = setParams.desc;\n if (Tinode.isNewGroupTopicName(topicName)) {\n // Full set.desc params are used for new topics only\n pkt.sub.set.desc = desc;\n } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n // Use optional default permissions only.\n pkt.sub.set.desc = {\n defacs: desc.defacs\n };\n }\n }\n\n // See if external objects were used in topic description.\n if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n pkt.extra = {\n attachments: setParams.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n\n if (setParams.tags) {\n pkt.sub.set.tags = setParams.tags;\n }\n }\n return this.#send(pkt, pkt.sub.id);\n }\n\n /**\n * Detach and optionally unsubscribe from the topic\n *\n * @param {string} topic - Topic to detach from.\n * @param {boolean} unsub - If true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.=} attachments - array of URLs with attachments.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publishMessage(pub, attachments) {\n // Make a shallow copy. Needed in order to clear locally-assigned temp values;\n pub = Object.assign({}, pub);\n pub.seq = undefined;\n pub.from = undefined;\n pub.ts = undefined;\n const msg = {\n pub: pub,\n };\n if (attachments) {\n msg.extra = {\n attachments: attachments.filter(ref => isUrlRelative(ref))\n };\n }\n return this.#send(msg, pub.id);\n }\n\n /**\n * Out of band notification: notify topic that an external (push) notification was recived by the client.\n *\n * @param {object} data - notification payload.\n * @param {string} data.what - notification type, 'msg', 'read', 'sub'.\n * @param {string} data.topic - name of the updated topic.\n * @param {number=} data.seq - seq ID of the affected message.\n * @param {string=} data.xfrom - UID of the sender.\n * @param {object=} data.given - new subscription 'given', e.g. 'ASWP...'.\n * @param {object=} data.want - new subscription 'want', e.g. 'RWJ...'.\n */\n oobNotification(data) {\n this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n\n switch (data.what) {\n case 'msg':\n if (!data.seq || data.seq < 1 || !data.topic) {\n // Server sent invalid data.\n break;\n }\n\n if (!this.isConnected()) {\n // Let's ignore the message if there is no connection: no connection means there are no open\n // tabs with Tinode.\n break;\n }\n\n const topic = this.#cacheGet('topic', data.topic);\n if (!topic) {\n // TODO: check if there is a case when a message can arrive from an unknown topic.\n break;\n }\n\n if (topic.isSubscribed()) {\n // No need to fetch: topic is already subscribed and got data through normal channel.\n break;\n }\n\n if (topic.maxMsgSeq() < data.seq) {\n if (topic.isChannelType()) {\n topic._updateReceived(data.seq, 'fake-uid');\n }\n\n // New message.\n if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n // Message from unknown sender, fetch description from the server.\n // Sending asynchronously without a subscription.\n this.getMeta(data.xfrom, new MetaGetBuilder().withDesc().build()).catch(err => {\n this.logger(\"Failed to get the name of a new sender\", err);\n });\n }\n\n topic.subscribe(null).then(_ => {\n return topic.getMeta(new MetaGetBuilder(topic).withLaterData(24).withLaterDel(24).build());\n }).then(_ => {\n // Allow data fetch to complete and get processed successfully.\n topic.leaveDelayed(false, 1000);\n }).catch(err => {\n this.logger(\"On push data fetch failed\", err);\n }).finally(_ => {\n this.getMeTopic()._refreshContact('msg', topic);\n });\n }\n break;\n\n case 'read':\n this.getMeTopic()._routePres({\n what: 'read',\n seq: data.seq\n });\n break;\n\n case 'sub':\n if (!this.isMe(data.xfrom)) {\n // TODO: handle updates from other users.\n break;\n }\n\n const mode = {\n given: data.modeGiven,\n want: data.modeWant\n };\n const acs = new AccessMode(mode);\n const pres = (!acs.mode || acs.mode == AccessMode._NONE) ?\n // Subscription deleted.\n {\n what: 'gone',\n src: data.topic\n } :\n // New subscription or subscription updated.\n {\n what: 'acs',\n src: data.topic,\n dacs: mode\n };\n this.getMeTopic()._routePres(pres);\n break;\n\n default:\n this.logger(\"Unknown push type ignored\", data.what);\n }\n }\n\n /**\n * @typedef GetQuery\n * @type {Object}\n * @property {GetOptsType=} desc - If provided (even if empty), fetch topic description.\n * @property {GetOptsType=} sub - If provided (even if empty), fetch topic subscriptions.\n * @property {GetDataType=} data - If provided (even if empty), get messages.\n */\n\n /**\n * @typedef GetOptsType\n * @type {Object}\n * @property {Date=} ims - \"If modified since\", fetch data only it was was modified since stated date.\n * @property {number=} limit - Maximum number of results to return. Ignored when querying topic description.\n */\n\n /**\n * @typedef GetDataType\n * @type {Object}\n * @property {number=} since - Load messages with seq id equal or greater than this value.\n * @property {number=} before - Load messages with seq id lower than this number.\n * @property {number=} limit - Maximum number of results to return.\n */\n\n /**\n * Request topic metadata\n *\n * @param {string} topic - Name of the topic to query.\n * @param {GetQuery} params - Parameters of the query. Use {@link Tinode.MetaGetBuilder} to generate.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n getMeta(topic, params) {\n const pkt = this.#initPacket('get', topic);\n\n pkt.get = mergeObj(pkt.get, params);\n\n return this.#send(pkt, pkt.get.id);\n }\n\n /**\n * Update topic's metadata: description, subscribtions.\n *\n * @param {string} topic - Topic to update.\n * @param {SetParams} params - topic metadata to update.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n setMeta(topic, params) {\n const pkt = this.#initPacket('set', topic);\n const what = [];\n\n if (params) {\n ['desc', 'sub', 'tags', 'cred', 'ephemeral'].forEach(function(key) {\n if (params.hasOwnProperty(key)) {\n what.push(key);\n pkt.set[key] = params[key];\n }\n });\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n if (what.length == 0) {\n return Promise.reject(new Error(\"Invalid {set} parameters\"));\n }\n\n return this.#send(pkt, pkt.set.id);\n }\n\n /**\n * Range of message IDs to delete.\n *\n * @typedef DelRange\n * @type {Object}\n * @property {number} low - low end of the range, inclusive (closed).\n * @property {number=} hi - high end of the range, exclusive (open).\n */\n /**\n * Delete some or all messages in a topic.\n *\n * @param {string} topic - Topic name to delete messages from.\n * @param {DelRange[]} list - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delMessages(topic, ranges, hard) {\n const pkt = this.#initPacket('del', topic);\n\n pkt.del.what = 'msg';\n pkt.del.delseq = ranges;\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete the topic alltogether. Requires Owner permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delTopic(topicName, hard) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'topic';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete subscription. Requires Share permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delSubscription(topicName, user) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'sub';\n pkt.del.user = user;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete credential. Always sent on 'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the element from the end of the buffer.\n * @memberof Tinode.CBuffer#\n * @param {number} at - position to fetch from, counting from the end;\n * undefined or null mean \"last\".\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(at) {\n at |= 0;\n return this.buffer.length > at ? this.buffer[this.buffer.length - 1 - at] : undefined;\n }\n\n /**\n * Add new element(s) to the buffer. Variadic: takes one or more arguments. If an array is passed as a single\n * argument, its elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive).\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive).\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = startIdx | 0;\n beforeIdx = beforeIdx || this.buffer.length;\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n mergeObj,\n mergeToCache,\n normalizeArray\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacls.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {boolean} forward if true, request newer messages.\n */\n getMessagesPage(limit, forward) {\n let query = forward ?\n this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then((count) => {\n if (count == limit) {\n // Got enough messages from local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = forward ? this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n let promise = this.getMeta(query.build());\n if (!forward) {\n promise = promise.then(ctrl => {\n if (ctrl && ctrl.params && !ctrl.params.count) {\n this._noEarlierMsgs = true;\n }\n });\n }\n return promise;\n });\n }\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subsriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Delete messages. Hard-deleting messages requires Owner permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.DelRange[]} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n // Sort ranges in accending order by low, the descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return true;\n }\n if (r1.low == r2.low) {\n return !r2.hi || (r1.hi >= r2.hi);\n }\n return false;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n let tosend = ranges.reduce((out, r) => {\n if (r.low < Const.LOCAL_SEQID) {\n if (!r.hi || r.hi < Const.LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: this._maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = ctrl.params.del;\n }\n\n ranges.forEach((r) => {\n if (r.hi) {\n this.flushMessageRange(r.low, r.hi);\n } else {\n this.flushMessage(r.low);\n }\n });\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} list - list of seq IDs to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesList(list, hardDel) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n let ranges = list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n // Send {del} message, return promise\n return this.delMessages(ranges, hardDel);\n }\n\n /**\n * Delete original message and edited variants. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delMessagesEdits(seq, hardDel) {\n const list = [seq];\n this.messageVersions(seq, msg => list.push(msg.seq));\n // Send {del} message, return promise\n return this.delMessagesList(list, hardDel);\n }\n\n /**\n * Delete topic. Requires Owner permission. Wrapper for {@link Tinode#delTopic}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hard - had-delete topic.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delTopic(hard) {\n if (this._deleted) {\n // The topic is already deleted at the server, just remove from DB.\n this._gone();\n return Promise.resolve(null);\n }\n\n return this._tinode.delTopic(this.name, hard).then(ctrl => {\n this._deleted = true;\n this._resetSub();\n this._gone();\n return ctrl;\n });\n }\n /**\n * Delete subscription. Requires Share permission. Wrapper for {@link Tinode#delSubscription}.\n * @memberof Tinode.Topic#\n *\n * @param {string} user - ID of the user to remove subscription for.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delSubscription(user) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delSubscription(this.name, user).then(ctrl => {\n // Remove the object from the subscription cache;\n delete this._users[user];\n // Notify listeners\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n return ctrl;\n });\n }\n /**\n * Send a read/recv notification.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what notification to send: recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.} a copy of tags\n */\n tags() {\n // Return a copy.\n return this._tags.slice(0);\n }\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (this._isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by seq.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent message from cache. This method counts all messages, including deleted ranges.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast();\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} newer - if true, check for newer messages only.\n */\n msgHasMoreMessages(newer) {\n return newer ? this.seq > this._maxSeq :\n // _minSeq could be more than 1, but earlier messages could have been deleted.\n (this._minSeq > 1 && !this._noEarlierMsgs);\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n _isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!this._isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n data.content = Drafty.updateVideoCall(data.content, {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n });\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived or in response to received\n // {ctrl} after setMeta-sub.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags.length == 1 && tags[0] == Const.DEL_CHAR) {\n tags = [];\n }\n this._tags = tags;\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n const topic = this;\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(function(range) {\n if (!range.hi) {\n count++;\n topic.flushMessage(range.low);\n } else {\n for (let i = range.low; i < range.hi; i++) {\n count++;\n topic.flushMessage(i);\n }\n }\n });\n }\n\n if (count > 0) {\n // this._updateDeletedRanges();\n\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, params) {\n const {\n since,\n before,\n limit\n } = params || {};\n return db.readMessages(this.name, {\n since: since,\n before: before,\n limit: limit || Const.DEFAULT_MESSAGES_PAGE\n })\n .then(msgs => {\n msgs.forEach((data) => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n return msgs.length;\n });\n }\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n}\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n"],"names":["root","factory","exports","module","define","amd","this","CanonicalizeLocaleList","locales","Intl","getCanonicalLocales","CanonicalizeTimeZoneName","tz","_a","zoneNames","uppercaseLinks","uppercasedTz","toUpperCase","uppercasedZones","reduce","all","z","ianaTimeZone","ToString","o","TypeError","String","ToNumber","val","undefined","NaN","Number","TimeClip","time","isFinite","Math","abs","n","number","isNaN","SameValue","integer","floor","ToInteger","ToObject","arg","Object","x","y","is","ArrayCreate","len","Array","HasOwnProperty","prop","prototype","hasOwnProperty","call","Type","MS_PER_DAY","mod","Day","t","WeekDay","DayFromYear","Date","UTC","TimeFromYear","YearFromTime","getUTCFullYear","DaysInYear","DayWithinYear","InLeapYear","MonthFromTime","dwy","leap","Error","DateFromTime","mft","HOURS_PER_DAY","MINUTES_PER_HOUR","SECONDS_PER_MINUTE","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","HourFromTime","MinFromTime","SecFromTime","OrdinaryHasInstance","C","O","internalSlots","boundTargetFunction","P","isPrototypeOf","msFromTime","CoerceOptionsToObject","options","create","DefaultNumberOption","inputVal","min","max","fallback","RangeError","concat","GetNumberOption","property","minimum","maximum","GetOption","opts","type","values","value","Boolean","filter","length","join","GetOptionsObject","GetStringOrBooleanOption","trueValue","falsyValue","indexOf","SANCTIONED_UNITS","removeUnitNamespace","unit","slice","SIMPLE_UNITS","map","IsSanctionedSimpleUnitIdentifier","unitIdentifier","IsValidTimeZoneName","zoneNamesFromData","Set","linkNames","forEach","add","keys","linkName","has","NOT_A_Z_REGEX","IsWellFormedCurrencyCode","currency","replace","_","c","test","IsWellFormedUnitIdentifier","toLowerCase","units","split","numerator","denominator","ApplyUnsignedRoundingMode","r1","r2","unsignedRoundingMode","d1","d2","CollapseNumberRange","result","getMagnitude","log","LOG10E","repeat","s","times","arr","i","setInternalSlot","pl","field","get","set","setMultiInternalSlots","props","_i","k","getInternalSlot","getMultiInternalSlots","fields","arguments","slots","f","isLiteralPart","patternPart","defineProperty","target","name","configurable","enumerable","writable","invariant","condition","message","Err","ComputeExponentForMagnitude","numberFormat","magnitude","getInternalSlots","notation","dataLocaleData","numberingSystem","compactDisplay","style","currencyDisplay","thresholdMap","numbers","nu","short","decimal","long","num","pow","thresholds","magnitudeKey","other","match","ToRawPrecision","minPrecision","maxPrecision","m","e","xFinal","int","p","xToString","toString","xToStringExponentIndex","xToStringMantissa","xToStringExponent","xToStringMantissaWithoutDecimalPoint","decimalPlaceOffset","round","adjustDecimalPlace","cut","formattedString","roundedNumber","integerDigitsCount","ToRawFixed","minFraction","maxFraction","mantissa","exponent","a","b","FormatNumericToString","intlObject","isNegative","roundingType","minimumSignificantDigits","maximumSignificantDigits","minimumFractionDigits","maximumFractionDigits","string","minInteger","minimumIntegerDigits","ComputeExponent","formatNumberResult","CurrencyDigits","currencyDigitsData","FormatApproximately","approximatelySign","symbols","push","digitMapping","S_UNICODE_REGEX","CARET_S_UNICODE_REGEX","RegExp","source","S_DOLLAR_UNICODE_REGEX","CLDR_NUMBER_PATTERN","formatToParts","numberResult","data","nonNameCurrencyPart","numberPattern","sign","defaultNumberingSystem","compactNumberPattern","pattern","compactPluralRules","byNumberingSystem","selectPlural","compactPlaralRule","getPatternForSign","getCompactDisplayPattern","byCurrencyDisplay","currencies","symbol","narrow","standard","currencyData","currencySign","percent","decimalNumberPattern","exec","afterCurrency","currencySpacing","afterInsertBetween","beforeCurrency","beforeInsertBetween","numberPatternParts","numberParts","numberPatternParts_1","part","apply","paritionNumberIntoParts","useGrouping","minusSign","plusSign","percentSign","substring","unitPattern","unitName","currencyNameData","displayName","unitPatternParts_1","unitDisplay","unitData","simple","_b","numeratorUnit","denominatorUnit","numeratorUnitPattern","perUnitPattern","perUnit","perPattern","compound","per","denominatorPattern","_c","_d","interpolateMatch","digitReplacementTable","digit","fraction","decimalSepIndex","groupSepSymbol","group","groups","patternGroups","primaryGroupingSize","secondaryGroupingSize","integerGroup","pop","exponential","exponentResult","zeroPattern","negativePattern","rules","select","PartitionNumberPattern","nan","POSITIVE_INFINITY","NEGATIVE_INFINITY","infinity","signDisplay","PartitionNumberRangePattern","xResult","yResult","xResult_1","rangeSign","yResult_1","FormatNumericRange","FormatNumericRangeToParts","index","FormatNumericToParts","nf","implDetails","parts","parts_1","negativeMapping","ceil","expand","trunc","halfCeil","halfFloor","halfExpand","halfTrunc","halfEven","positiveMapping","GetUnsignedRoundingMode","roundingMode","SetNumberFormatDigitOptions","mnfdDefault","mxfdDefault","mnid","mnfd","mxfd","mnsd","mxsd","roundingPriority","hasSd","hasFd","needSd","needFd","SetNumberFormatUnitOptions","VALID_ROUND_INCREMENT_VALUES","InitializeNumberFormat","localeData","availableLocales","numberingSystemNames","getDefaultLocale","requestedLocales","opt","matcher","localeMatcher","r","ResolveLocale","from","dataLocale","locale","cDigits","roundingIncrement","trailingZeroDisplay","defaultUseGrouping","PartitionPattern","beginIndex","endIndex","nextIndex","SupportedLocales","LookupSupportedLocales","RangePatternType","_super","MissingLocaleDataError","_this","__extends","isMissingLocaleDataError","supplemental","languageMatching","paradigmLocales","_locales","$enUS","_value","$cnsar","$americas","$maghreb","no","_desired","_distance","bs","hr","sr","aa","de","_oneway","nb","ru","en","nl","es","ur","hi","zh","fr","fil","ar","sk","da","id","tr","it","az","et","ff","gn","iu","kln","kok","kpe","luy","lv","mg","mn","ms","ne","om","or","ps","qu","sc","sq","syr","uz","yi","regions","UNICODE_EXTENSION_SEQUENCE_REGEX","PROCESSED_DATA","DEFAULT_MATCHING_THRESHOLD","isMatched","languageMatchInfoLocale","matchVariables","language","script","region","matches","shouldInclude","expandedMatchedRegions","list","__spreadArray","serializeLSR","lsr","findMatchingDistanceForLSR","desired","supported","d","oneway","distance","findMatchingDistance","desiredLocale","Locale","maximize","supportedLocale","desiredLSR","supportedLSR","matchingDistance","key","l","processData","BestFitMatcher","foundLocale","extension","noExtensionLocales","noExtensionLocaleMap","noExtensionLocale","supportedLocales","threshold","lowestDistance","Infinity","matchedDesiredLocale","distances","matchedSupportedLocale","findBestMatch","BestAvailableLocale","candidate","pos","lastIndexOf","UnicodeExtensionValue","size","searchValue","start","end","done","relevantExtensionKeys","requestedLocales_1","availableLocale","LookupMatcher","supportedExtension","relevantExtensionKeys_1","foundLocaleData","keyLocaleData","isArray","supportedExtensionAddition","requestedValue","optionsValue","privateIndex","preExtension","postExtension","subset","defaultLocale","algorithm","segmenter_1","shouldPolyfill","Segmenter","SegmentationRules","isSurrogate","replaceVariables","variables","input","replaceAll","str","charCodeAt","tslib_1","cldr_segmentation_rules_generated_1","segmentation_utils_1","ecma402_abstract_1","intl_localematcher_1","generateRuleRegex","rule","after","breaksAtResult","breaks","matchingRule","constructor","granularity","setSlot","mergedSegmentationTypeValue","localeOverrides","localeSegmentationTypeValue","__assign","segmentRules","suppressions","segmentationTypeValue","preparedRules","ruleNr","ruleValue","preparedRule","before","prepareLocaleSegmentationRules","ruleSortedKeys","sort","breaksAt","position","stringBeforeBreak","stringAfterBreak","trim","endsWith","ruleSortedKeys_1","ruleKey","segment","checkReceiver","SegmentIterator","resolvedOptions","__INTERNAL_SLOT_MAP__","supportedLocalesOf","polyfilled","createSegmentDataObject","segmenter","instance","returnValue","isWordLike","lastSegmentIndex","Symbol","iterator","next","checkString","containing","positionInput","previousBreakPoint","checkString_1","cursor","WeakMap","receiver","methodName","toStringTag","MAX_PREVIEW_DATA_SIZE","JSON_MIME_TYPE","ALLOWED_ENT_FIELDS","INLINE_STYLES","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","url","re","FORMAT_TAGS","AU","html_tag","md_tag","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","logger","bin","atob","buf","ArrayBuffer","Uint8Array","URL","createObjectURL","Blob","err","base64toDataUrl","DECORATORS","open","close","href","act","ref","mime","Drafty","src","duration","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","chunkify","line","spans","chunks","span","at","chunk","tp","chld","children","toSpanTree","tree","last","draftyToTree","doc","text","attachments","includes","getGraphemesFromString","diff","graphemes","spansToTree","treeTopDown","node","child","parent","addNode","att","subspans","inner","tag","treeToDrafty","keymap","newKey","transformer","context","dst","treeBottomUp","formatter","stack","shortenTree","limit","tail","lightEntity","allow","copyEntData","lTrim","trimStart","shift","attachmentsToEnd","draftify","startAt","plain","ranges","drafty","light","entries","dc","getCorrectLengthsWhenTreatedAsGrapheme","segments","indices","graphemeIndex","charIndex","getGraphemeIndices","correctAt","init","plainText","parse","content","lines","entityMap","entityIndex","blx","entities","block","original","re_start","re_end","start_offset","end_offset","spannify","extracted","entity","offset","unique","idx","el","extractEntities","ele","correctLen","obj","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","params","assign","quote","header","uid","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","wrapAsForm","insertButton","actionType","actionValue","refUrl","appendButton","attachJSON","UNSAFE_toHTML","format","shorten","forwardedContent","replyContent","startsWith","forwarding","toPlainText","isPlainText","toMarkdown","def","isValid","txt_type","hasAttachments","callback","count","hasEntities","styles","sanitizeEntities","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","extendStatics","setPrototypeOf","__proto__","__","__rest","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__esDecorate","ctor","descriptorIn","contextIn","initializers","extraInitializers","accept","kind","descriptor","access","addInitializer","unshift","__runInitializers","thisArg","useValue","__propKey","__setFunctionName","prefix","description","__metadata","metadataKey","metadataValue","metadata","__awaiter","_arguments","generator","Promise","resolve","reject","fulfilled","step","rejected","__generator","g","label","sent","trys","ops","verb","v","op","__createBinding","k2","__esModule","__exportStar","__values","__read","error","__spread","__spreadArrays","il","j","jl","to","__await","__asyncGenerator","asyncIterator","q","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","__importDefault","default","__classPrivateFieldGet","__classPrivateFieldSet","__classPrivateFieldIn","__addDisposableResource","env","async","dispose","asyncDispose","_SuppressedError","SuppressedError","suppressed","__disposeResources","fail","hasError","rec","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","definition","globalThis","Function","window","AccessMode","acs","given","decode","want","mode","side","flag","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","bit","charAt","encode","_INVALID","res","update","upd","action","val0","a1","a2","jsonHelper","setMode","updateMode","u","getMode","setGiven","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_GRP","LOCAL_SEQID","DEL_CHAR","CommError","code","super","jsonParseHelper","date","isUrlRelative","isValidDate","getTime","mergeObj","ignore","mergeToCache","cache","newval","simplify","getOwnPropertyNames","WebSocketProvider","XHRProvider","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","makeBaseUrl","host","protocol","version","apiKey","Connection","static","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","setNetworkProviders","wsProvider","xhrProvider","connect","host_","force","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","clearTimeout","timeout","random","onAutoreconnectIteration","setTimeout","prom","catch","_lpURL","_poller","_sender","lp_poller","url_","poller","promiseCompleted","onreadystatechange","evt","readyState","status","pkt","JSON","responseText","ctrl","sid","send","onOpen","onMessage","onDisconnect","abort","sender","lp_sender","OPEN","conn","onerror","onopen","onclose","onmessage","NETWORK_ERROR","DB_NAME","IDBProvider","DB","db","disabled","onError","trx","transaction","event","objectStore","getAll","onsuccess","topic","initDatabase","req","onupgradeneeded","createObjectStore","keyPath","deleteDatabase","onblocked","isReady","updTopic","oncomplete","put","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","updUser","pub","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","mapSubscriptions","addMessage","updMessageStatus","seq","_status","remMessages","range","readMessages","query","since","openCursor","continue","tags","_tags","setAccessMode","read","unread","getAccessMode","setDatabaseProvider","idbProvider","IndexedDBProvider","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","setRequestHeader","token","toResolve","toReject","upload","onprogress","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","relUrl","location","origin","searchParams","addURLParam","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","MetaGetBuilder","what","updated","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withEarlierData","_minSeq","withDesc","ims","withLaterDesc","withSub","userOrTopic","getType","withOneSub","withLaterOneSub","withLaterSub","withTags","withCred","withDel","withLaterDel","_maxDel","extract","build","CBuffer","buffer","compare_","unique_","elem","exact","pivot","found","splice","getAt","getLast","insert","delAt","delRange","reset","startIdx","beforeIdx","find","nearest","isEmpty","Topic","callbacks","created","touched","private","trusted","_users","_queuedSeqId","Const","_noEarlierMsgs","_recvNotificationTimer","_credentials","_messageVersions","_messages","_attached","_new","_delayedLeaveTimer","onData","onMeta","onPres","onInfo","onMetaDesc","onMetaSub","onSubsUpdated","onTagsUpdated","onCredsUpdated","onDeleteTopic","onAllMessagesReceived","topicType","isMeTopicName","isGroupTopicName","isP2PTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","isSubscribed","subscribe","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","_noForwarding","_processMetaDesc","createMessage","noEcho","publish","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_db","_cancelled","_fatal","leave","unsub","_resetSub","_gone","leaveDelayed","delay","getMeta","getMessagesPage","forward","startMetaQuery","_loadMessages","promise","setMeta","out","item","ary","normalizeArray","_processMetaSubs","_processMetaTags","cred","_processMetaCreds","subscriber","am","invite","archive","arch","delMessages","hard","low","tosend","del","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","prev","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","_refreshContact","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","recv","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","cb","origSeq","versions","messages","sinceId","beforeId","msgs","unused1","unused2","_isReplacementMsg","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","msgHasMoreMessages","newer","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isArchived","isMeType","isChannelType","isGroupType","isCommType","isMe","head","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","_routeInfo","_routeMeta","meta","_processDelMessages","clear","delseq","_routePres","pres","online","isTopicCached","dacs","info","subs","_updateCachedUser","creds","_allMessagesReceived","cached","_cachePutUser","_updateReceived","TopicMe","onContactUpdate","turnOff","_myUID","cont","seen","when","updateCount","cacheRemTopic","getTopic","cr","findIndex","meth","resp","cacheGetTopic","tgt","ua","dummy","delCredential","method","contacts","getContact","getCredentials","TopicFnd","_contacts","indexBy","getPrototypeOf","b64EncodeUnicode","btoa","encodeURIComponent","p1","fromCharCode","jsonBuildHelper","pad","sp","millis","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","rfc3339DateString","jsonLoggerHelper","WebSocket","XMLHttpRequest","indexedDB","chars","global","output","charCode","bc","DBCache","initForNonBrowserApp","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","product","reactnative","priority","tmp","substr","tokens","m2","minor","getBrowserInfo","userAgent","detectTransport","persist","dateString","_len","args","_key","console","onOK","errorText","stringify","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","setInterval","expires","hello","clearInterval","func","_cacheDelUser","onLogin","credential","getVersion","getLibrary","isNullValue","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","URI_TOPIC_ID_PREFIX"],"sourceRoot":""} \ No newline at end of file