{"version":3,"file":"index.cjs","sources":["../node_modules/@gobstones/gobstones-core/dist/index.js","../src/translations/en.ts","../src/translations/es.ts","../src/translations/index.ts","../src/parser/models.ts","../node_modules/nearley/lib/nearley.js","../src/parser/errors.ts","../node_modules/moo/moo.js","../src/grammar/gbb-lexer.js","../src/grammar/nearley-helper.js","../src/grammar/gbb-grammar.js","../src/grammar/tokenizer.ts","../src/grammar/index.ts","../src/parser/parser.ts","../src/stringifier/models.ts","../src/stringifier/errors.ts","../src/stringifier/stringifier.ts","../src/index.ts"],"sourcesContent":["import require$$0 from 'events';\n\n/**\n * The base class of the error hierarchy that is thrown when\n * an invalid operation is performed in the [[Board/Board | Board]]\n * class and it's associated [[Board/Cell | Cell]].\n */\nclass BoardError extends Error {\n    constructor(name, message) {\n        super(message);\n        this.name = name;\n        this.isError = true;\n        Object.setPrototypeOf(this, BoardError.prototype);\n    }\n}\n/**\n * This error is thrown when attempting to create a board\n * with invalid data.\n */\nclass InvalidBoardDescription extends BoardError {\n    constructor(height, width, cellLocation) {\n        super('InvalidBoardDescription', `The values used to create the board are invalid. ` +\n            ` height: ${height}, width: ${width}, cell location: ${cellLocation}`);\n        this.height = height;\n        this.width = width;\n        this.cellLocation = cellLocation;\n        Object.setPrototypeOf(this, InvalidBoardDescription.prototype);\n    }\n}\n/**\n * This error is thrown when attempting to read a cell, a\n * column or a row but an invalid location is given.\n */\nclass InvalidCellReading extends BoardError {\n    constructor(attempt, failingCoordinate) {\n        super('InvalidCellReading', `The attempt of ${attempt} failed for coordinate ` +\n            `[${failingCoordinate[0]}, ${failingCoordinate[1]}].`);\n        this.attempt = attempt;\n        this.failingCoordinate = failingCoordinate;\n        Object.setPrototypeOf(this, InvalidCellReading.prototype);\n    }\n}\n/**\n * This error is thrown when attempting to move the head, but an\n * invalid location is given.\n */\nclass LocationFallsOutsideBoard extends BoardError {\n    constructor(attempt, failingCoordinate, previousCoordinate) {\n        super('LocationFallsOutsideBoard', `The attempt of ${attempt} from [${previousCoordinate[0]}, ` +\n            `${previousCoordinate[1]}] falls outside the board on ` +\n            `coordinate [${failingCoordinate[0]}, ${failingCoordinate[1]}].`);\n        this.attempt = attempt;\n        this.failingCoordinate = failingCoordinate;\n        this.previousCoordinate = previousCoordinate;\n        Object.setPrototypeOf(this, LocationFallsOutsideBoard.prototype);\n    }\n}\n/**\n * This error is thrown when attempting to change the size of the board,\n * but an invalid size is given\n */\nclass InvalidSizeChange extends BoardError {\n    constructor(attempt, previousWidth, previousHeight, newWidth, newHeight) {\n        super('InvalidSizeChange', `The attempt of changing size by ${attempt} from width ${previousWidth}, ` +\n            `and height ${previousHeight} ends in an invalid board of width ` +\n            `${newWidth} and height ${newHeight}.`);\n        this.attempt = attempt;\n        this.previousWidth = previousWidth;\n        this.previousHeight = previousHeight;\n        this.newWidth = newWidth;\n        this.newHeight = newHeight;\n        Object.setPrototypeOf(this, InvalidSizeChange.prototype);\n    }\n}\n/**\n * This error is thrown when attempting to change the stones amount\n * with an invalid amount of stone (negative amount).\n */\nclass InvalidStonesAmount extends BoardError {\n    constructor(attempt, color, amount, previousCellState) {\n        super('InvalidStonesAmount', `The attempt of ${attempt} failed for color ${color} given ${amount}.`);\n        this.attempt = attempt;\n        this.color = color;\n        this.amount = amount;\n        this.previousCellState = previousCellState;\n        Object.setPrototypeOf(this, InvalidStonesAmount.prototype);\n    }\n}\n\n/**\n * This enum represent the valid Gobstones Colors.\n * It's accompanied by a namespace with the same name, that provides additional\n * functionality, such as asking for the first or the last color, or iterate over\n * the elements of this enum.\n *\n * Note that directions are sorted in the following order, from first to last.\n * * Color.Blue\n * * Color.Black\n * * Color.Red\n * * Color.Green\n *\n * Always prefer using the enum over the string values it represents,\n * even as object keys.\n */\nvar Color;\n(function (Color) {\n    Color[\"Blue\"] = \"a\";\n    Color[\"Black\"] = \"n\";\n    Color[\"Red\"] = \"r\";\n    Color[\"Green\"] = \"v\";\n})(Color || (Color = {}));\n/**\n * This namespace provides additional functionality that extends the simple\n * Color enum, by providing some helper functions.\n */\n(function (Color) {\n    /**\n     * The smallest Color possible, currently [[Color.Blue]]\n     *\n     * @returns The smallest color.\n     */\n    Color.min = () => Color.Blue;\n    /**\n     * The biggest Color possible, currently [[Color.Green]]\n     *\n     * @returns The biggest color.\n     */\n    Color.max = () => Color.Green;\n    /**\n     * The next Color of a given Color. Colors are sorted\n     * in the following way, from first to last:\n     * * Color.Blue\n     * * Color.Black\n     * * Color.Red\n     * * Color.Green\n     *\n     * And they are cyclic, that is, the next color of Green is Blue.\n     *\n     * @param color The color to obtain the next value from.\n     *\n     * @returns The next color of the given one.\n     */\n    Color.next = (color) => {\n        switch (color) {\n            case Color.Blue:\n                return Color.Black;\n            case Color.Black:\n                return Color.Red;\n            case Color.Red:\n                return Color.Green;\n            case Color.Green:\n                return Color.Blue;\n            /* istanbul ignore next */\n            default:\n                return undefined;\n        }\n    };\n    /**\n     * The next Color of a given Color. Color are sorted\n     * in the following way, from last to first:\n     * * Color.Green\n     * * Color.Red\n     * * Color.Black\n     * * Color.Blue\n     *\n     * And they are cyclic, that is, the previous color of Blue is Green.\n     *\n     * @param color The color to obtain the previous value from.\n     *\n     * @returns The previous color of the given one.\n     */\n    Color.previous = (color) => {\n        switch (color) {\n            case Color.Blue:\n                return Color.Green;\n            case Color.Black:\n                return Color.Blue;\n            case Color.Red:\n                return Color.Black;\n            case Color.Green:\n                return Color.Red;\n            /* istanbul ignore next */\n            default:\n                return undefined;\n        }\n    };\n    /**\n     * Iterate over all the colors, in their defined order, from the smallest,\n     * to the biggest, performing the callback over each color. A function that\n     * expects a color and returns void is expected as an argument.\n     *\n     * @param f The callback to call on each iteration.\n     */\n    function foreach(f) {\n        let current = Color.min();\n        while (current !== Color.max()) {\n            f(current);\n            current = Color.next(current);\n        }\n        f(current);\n    }\n    Color.foreach = foreach;\n})(Color || (Color = {}));\n\n/**\n * This enum represent the valid Gobstones Directions.\n * It's accompanied by a namespace with the same name, that provides additional\n * functionality, such as asking for the first or the last direction, or iterate over\n * the elements of this enum.\n *\n * Note that directions are sorted in the following order, from first to last.\n * * Direction.North\n * * Direction.East\n * * Direction.South\n * * Direction.West\n *\n * Always prefer using the enum over the string values it represents,\n * even as object keys.\n */\nvar Direction;\n(function (Direction) {\n    Direction[\"North\"] = \"n\";\n    Direction[\"East\"] = \"e\";\n    Direction[\"South\"] = \"s\";\n    Direction[\"West\"] = \"w\";\n})(Direction || (Direction = {}));\n/**\n * This namespace provides additional functionality that extends the simple\n * Direction enum, by providing some helper functions.\n */\n(function (Direction) {\n    /**\n     * The smallest Direction possible, currently [[Direction.North]]\n     *\n     * @returns The smallest direction.\n     */\n    Direction.min = () => Direction.North;\n    /**\n     * The biggest Direction possible, currently [[Direction.West]]\n     *\n     * @returns The biggest direction.\n     */\n    Direction.max = () => Direction.West;\n    /**\n     * The next Direction of a given Direction. Directions are sorted\n     * in the following way, from first to last:\n     * * Direction.North\n     * * Direction.East\n     * * Direction.South\n     * * Direction.West\n     *\n     * And they are cyclic, that is, the next direction of West is North.\n     *\n     * @param dir The direction to obtain the next value from.\n     *\n     * @returns The next direction of the given one.\n     */\n    Direction.next = (dir) => {\n        switch (dir) {\n            case Direction.North:\n                return Direction.East;\n            case Direction.East:\n                return Direction.South;\n            case Direction.South:\n                return Direction.West;\n            case Direction.West:\n                return Direction.North;\n            /* istanbul ignore next */\n            default:\n                return undefined;\n        }\n    };\n    /**\n     * The next Direction of a given Direction. Directions are sorted\n     * in the following way, from last to first:\n     * * Direction.West\n     * * Direction.South\n     * * Direction.East\n     * * Direction.North\n     *\n     * And they are cyclic, that is, the previous direction of North is West.\n     *\n     * @param dir The direction to obtain the previous value from.\n     *\n     * @returns The previous direction of the given one.\n     */\n    Direction.previous = (color) => {\n        switch (color) {\n            case Direction.North:\n                return Direction.West;\n            case Direction.East:\n                return Direction.North;\n            case Direction.South:\n                return Direction.East;\n            case Direction.West:\n                return Direction.South;\n            /* istanbul ignore next */\n            default:\n                return undefined;\n        }\n    };\n    /**\n     * The opposite Direction of a given Direction. Directions are opposed\n     * to each other in pairs, those being:\n     * * Direction.West is opposite to Direction.East and vice versa\n     * * Direction.North is opposite to Direction.South and vice versa\n     *\n     * @param dir The direction to obtain the opposite value from.\n     *\n     * @returns The opposite direction of the given one.\n     */\n    Direction.opposite = (color) => {\n        switch (color) {\n            case Direction.North:\n                return Direction.South;\n            case Direction.East:\n                return Direction.West;\n            case Direction.South:\n                return Direction.North;\n            case Direction.West:\n                return Direction.East;\n            /* istanbul ignore next */\n            default:\n                return undefined;\n        }\n    };\n    /**\n     * Answer wether or not the given direction is vertical,\n     * that is, one of Direction.North or Direction.South.\n     *\n     * @param dir The direction to find out if it's vertical.\n     *\n     * @returns `true` if it's vertical, `false` otherwise.\n     */\n    Direction.isVertical = (dir) => dir === Direction.North || dir === Direction.South;\n    /**\n     * Answer wether or not the given direction is horizontal,\n     * that is, one of Direction.East or Direction.West.\n     *\n     * @param dir The direction to find out if it's horizontal.\n     *\n     * @returns `true` if it's horizontal, `false` otherwise.\n     */\n    Direction.isHorizontal = (dir) => !Direction.isVertical(dir);\n    /**\n     * Iterate over all the directions, in their defined order, from the smallest,\n     * to the biggest, performing the callback over each direction. A function that\n     * expects a direction and returns void is expected as an argument.\n     *\n     * @param f The callback to call on each iteration.\n     */\n    Direction.foreach = (f) => {\n        let current = Direction.min();\n        while (current !== Direction.max()) {\n            f(current);\n            current = Direction.next(current);\n        }\n        f(current);\n    };\n})(Direction || (Direction = {}));\n\nvar TypedEmitter = require$$0.EventEmitter;\n\n/**\n * This is just a helper module that re-export the useful\n * [binier/tiny-typed-emitter](https://github.com/binier/tiny-typed-emitter).\n * You can check out information about this module at their README.\n *\n * @see https://github.com/binier/tiny-typed-emitter\n *\n * @author Alan Rodas Bonjour <alanrodas@gmail.com>\n *\n * @packageDocumentation\n */\n/**\n * This is a rename of EventEmitter that allows for type checking\n * of the event's emitting in a class. Just extend your event\n * throwing classes with TypeEmitter with the events signature as a\n * generic type, and expect that calling emit throws errors when not\n * typechecking. The on event over instances of the class will also\n * throws errors when invalid event names are used.\n *\n * @see [binier/tiny-typed-emitter](https://github.com/binier/tiny-typed-emitter)\n *      to read more information about how all this works.\n */\nconst TypedEmitter$1 = TypedEmitter;\n\n/**\n * This module provides the function [[deepEquals]] that allows to test\n * if two object are semantically equal. The module is loosely based on\n * [inspect-js/node-deep-equal](https://github.com/inspect-js/node-deep-equal)\n * but removing all dependencies.\n *\n * The function is intended for comparison of basic types, simple non classed\n * objects, arrays, and built-in basic classed objects such as Set, Map, RegExp,\n * Date, Buffer and Error.\n *\n * Note that deep equality is costly, and should be avoided whenever possible. Yet\n * is some scenarios, it may be useful to count with such a function. In that sense,\n * we provide a 'cheap' (in terms of dependency overhead) alternative to most\n * third-party implementations, that can be used through the whole project.\n *\n * Note that the implementation is kind of ugly and heavily procedural. The idea\n * behind the code is to return a result as fast as possible. Also note that it might\n * not consider the most edgy cases. If you have trouble with a specific case,\n * please consider sending a Pull Request or raising an Issue in this project's\n * repository.\n *\n * @author Alan Rodas Bonjour <alanrodas@gmail.com>\n *\n * @packageDocumentation\n */\n/**\n * Answer wether or not two elements are equal, considering them\n * equal when they have the same type and all their internal elements are\n * the same, or when they represent the same concept (two regular expressions\n * that match the same string, to date for the same moment, to sets with same\n * elements in it, and so on).\n *\n * Most simple cases should return true as expected, such as:\n * * `deepEquals(1, 1.0)`\n * * `deepEquals({a: 1, b: {c: 3, d: 4}}, {b: {c: 3, d: 4}, a: 1})`\n * * `deepEquals([1,2,3], [1, 1+1, 2+1])`\n * * `deepEquals(new Set([1,2,3]), new Set([3,2,1]))`\n *\n * There is one special case, that we support and that might not be expected\n * in standard TS/JS behavior, which is `NaN` comparison. Here you might find\n * that `deepEquals(NaN, NaN)` is `true`, even though in JS NaN is not equal\n * to anything, even itself.\n *\n * Note that parameters are statically typed when running in TypeScript,\n * thus not allowing for things such as `deepEquals(4, '4.0')` to be typed,\n * unless explicitly casted away. In that case even, the comparison is performed\n * not considering type coercion, thus, returning false.\n *\n * If you want to see all supported and unsupported cases, we recommend you to check\n * out the test cases.\n *\n *\n * @param first The element to compare to.\n * @param second The element to compare against.\n *\n * @return `true` if both elements are equal, `false` otherwise.\n */\nconst deepEquals = (first, second) => {\n    const compare = (a, b) => {\n        // Return true if they are the same object\n        if (a === b)\n            return true;\n        // and false if they don't have the same type\n        else if (typeof a !== typeof b)\n            return false;\n        // Check for types and call a specific comparer\n        // depending on the type\n        if (typeof a === 'number' && typeof b === 'number')\n            return numberEquals(a, b);\n        // Cases where they are both objects start here, many\n        // different things are considered object in JS, so\n        // we need to disambiguate.\n        if (typeof a === 'object' && typeof b === 'object') {\n            // If they belong to different classes, then they are not equal,\n            // one of them might not have a class, so consider that case too.\n            if (a.constructor && b.constructor && a.constructor !== b.constructor)\n                return false;\n            // Use array comparison if both are arrays\n            if (Array.isArray(a) && Array.isArray(b))\n                return arrayEquals(a, b, compare);\n            // If both are Sets\n            if (a instanceof Set && b instanceof Set)\n                return setEquals(a, b);\n            // If both are Maps\n            if (a instanceof Map && b instanceof Map)\n                return mapEquals(a, b, compare);\n            // If both are Errors\n            if (a instanceof Error && b instanceof Error)\n                return errorEquals(a, b);\n            // If both are RegExp\n            if (a instanceof RegExp && b instanceof RegExp)\n                return regexpEquals(a, b);\n            // If both are Dates\n            if (a instanceof Date && b instanceof Date)\n                return dateEquals(a, b);\n            // If both are Buffers\n            if (isBuffer(a) && isBuffer(b))\n                return bufferEquals(a, b);\n            // Reached this case we consider a plain object (or class\n            // with plain properties that can be accessed)\n            return objectEquals(a, b, compare);\n        }\n        return false;\n    };\n    return compare(first, second);\n};\n/**\n * Answer if two numbers are equal. Two numbers are equal\n * if they happen to be the same number, or, if both are NaN.\n *\n * @param a The first number\n * @param b The second number\n *\n * @returns true when both numbers are the same, or both are NaN.\n */\nconst numberEquals = (a, b) => {\n    if (Number.isNaN(a) && Number.isNaN(b))\n        return true;\n    else\n        return a === b;\n};\n/**\n * Answer if two arrays are equal. Two arrays are equal when they both\n * have the exact same number of elements, and they have the same element\n * in each position. To consider if two elements inside the array are equal\n * the [[innerComparer]] is used. The expected value for [[innerComparer]]\n * is the recursive comparer function in deepEquals.\n *\n * @param a The first array\n * @param b The second array\n * @param innerComparer The function for testing if two inner elements are equal\n *\n * @returns `true` if both arrays are equal, `false` otherwise.\n */\nconst arrayEquals = (aArr, bArr, innerComparer) => {\n    // Two arrays should have the same length\n    if (aArr.length !== bArr.length)\n        return false;\n    // And the same element in each position, which is\n    // compared by deep equality\n    for (let i = 0; i < aArr.length; i++) {\n        // In case the value in a position is not equal,\n        // they are not equal\n        if (!innerComparer(aArr[i], bArr[i]))\n            return false;\n    }\n    // They are only equal after full comparison\n    return true;\n};\n/**\n * Answer if two objects are equal. Two objects are equal when they both\n * have the exact same number of properties, with same names, and they\n * have the same value in each property. To consider if two values of a property\n * are equal the [[innerComparer]] is used. The expected value for [[innerComparer]]\n * is the recursive comparer function in deepEquals.\n *\n * @param a The first object\n * @param b The second object\n * @param innerComparer The function for testing if two inner elements are equal\n *\n * @returns `true` if both object are equal, `false` otherwise.\n */\nconst objectEquals = (aArr, bArr, innerComparer) => {\n    // Obtain the object keys, sorted\n    const aKeys = Object.keys(aArr).sort();\n    const bKeys = Object.keys(bArr).sort();\n    // They should have the same amount of keys\n    if (aKeys.length !== bKeys.length)\n        return false;\n    // And perform a cheap key test (they should both have same keys)\n    for (let i = 0; i < aKeys.length; i++) {\n        if (aKeys[i] !== bKeys[i])\n            return false;\n    }\n    // If they do, perform a more expensive deep equal test in all values\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < aKeys.length; i++) {\n        const aValue = aArr[aKeys[i]];\n        const bValue = bArr[aKeys[i]];\n        if (!innerComparer(aValue, bValue))\n            return false;\n    }\n    // They must be equal when this is reached\n    return true;\n};\n/**\n * Answer if two Sets are equal. Two Sets are equal when they both\n * have the exact same number of elements, and they have the same\n * elements.\n *\n * @param a The first object\n * @param b The second object\n *\n * @returns `true` if both object are equal, `false` otherwise.\n */\nconst setEquals = (a, b) => {\n    if (a.size !== b.size)\n        return false;\n    const aIterator = a.entries();\n    let aNext = aIterator.next();\n    while (aNext && !aNext.done) {\n        if (!b.has(aNext.value[1]))\n            return false;\n        aNext = aIterator.next();\n    }\n    return true;\n};\n/**\n * Answer if two Maps are equal. Two Maps are equal when they both\n * have the exact same number of keys, with same key names, and they\n * have the same value in each key. To consider if two values of a key\n * are equal the [[innerComparer]] is used. The expected value for [[innerComparer]]\n * is the recursive comparer function in deepEquals.\n *\n * @param a The first map\n * @param b The second map\n * @param innerComparer The function for testing if two inner elements are equal\n *\n * @returns `true` if both Maps are equal, `false` otherwise.\n */\nconst mapEquals = (a, b, innerComparer) => {\n    if (a.size !== b.size)\n        return false;\n    const aEntries = a.entries();\n    let aNext = aEntries.next();\n    while (!aNext.done) {\n        // Should have a key with same name or value\n        if (!b.has(aNext.value[0]))\n            return false;\n        if (!innerComparer(aNext.value[1], b.get(aNext.value[0])))\n            return false;\n        aNext = aEntries.next();\n    }\n    return true;\n};\n/**\n * Answer if two Errors are equal. Two Errors are equal when they both\n * have the exact name and message.\n *\n * @param a The first Error\n * @param b The second Error\n *\n * @returns `true` if both Errors are equal, `false` otherwise.\n */\nconst errorEquals = (a, b) => a.name === b.name && a.message === b.message;\n/**\n * Answer if two RegExps are equal. Two RegExps are equal when they both\n * have the exact source and flags.\n *\n * @param a The first RegExp\n * @param b The second RegExp\n *\n * @returns `true` if both RegExp are equal, `false` otherwise.\n */\nconst regexpEquals = (a, b) => a.source === b.source && a.flags === b.flags;\n/**\n * Answer if two Dates are equal. Two Date are equal when they both\n * have the exact time.\n *\n * @param a The first Date\n * @param b The second Date\n *\n * @returns `true` if both Date are equal, `false` otherwise.\n */\nconst dateEquals = (a, b) => a.getTime() === b.getTime();\n/**\n * Answer if two Buffers are equal. Two Buffers are equal when they both\n * have the exact element at each position.\n *\n * @param a The first Buffer\n * @param b The second Buffer\n *\n * @returns `true` if both Buffers are equal, `false` otherwise.\n */\nconst bufferEquals = (a, b) => {\n    if (a.length !== b.length)\n        return false;\n    for (let i = 0; i < a.length; i++) {\n        if (a[i] !== b[i])\n            return false;\n    }\n    return true;\n};\n/**\n * Answer if an element is a Buffer.\n *\n * @param x The element to test if it's a buffer\n *\n * @returns `true` if the element is a Buffer, `false` otherwise.\n */\nconst isBuffer = (x) => !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x));\n\n/**\n * This module provides the [[Matchers]] class, that contains all the matchers\n * for the expectations. All matchers are centralized in this module for\n * bigger extensibility.\n *\n * Additionally, it provides the [[MatcherCall]] interface, that allows to\n * register the result of a call to a specific matcher.\n *\n * @author Alan Rodas Bonjour <alanrodas@gmail.com>\n *\n * @packageDocumentation\n */\n/**\n * This object contains a series of matchers, that is, a series of functions\n * that can be called with the actual value (and in cases a series of arguments)\n * and returns a boolean, `true` if the value satisfies the matcher, and `false`\n * otherwise.\n *\n * Having the matchers separated from the instances that use the matchers allow for\n * greater extensibility.\n */\nclass Matchers {\n    // Generic\n    /** Answers if the actual value is the same as expected, using strict compare */\n    static toBe(actual, expected) {\n        return actual === expected;\n    }\n    /** Answers if the actual value is the same as expected, using a deep compare mechanism */\n    static toBeLike(actual, expected) {\n        return deepEquals(actual, expected);\n    }\n    /** Answers if the actual value is defined (as in not equal to undefined) */\n    static toBeDefined(actual) {\n        return actual !== undefined;\n    }\n    /** Answers if the actual value is undefined */\n    static toBeUndefined(actual) {\n        return actual === undefined;\n    }\n    /** Answers if the actual value is null (strict null, not undefined) */\n    static toBeNull(actual) {\n        // eslint-disable-next-line no-null/no-null\n        return actual === null;\n    }\n    /** Answers if the actual value is a truthy value */\n    static toBeTruthy(actual) {\n        return !!actual;\n    }\n    /** Answers if the actual value is a falsy value */\n    static toBeFalsy(actual) {\n        return !actual;\n    }\n    /**\n     * Answers if the actual value has a type matching the expected type.\n     * This comparison is performed using the `typeof` operation over the value,\n     * with additional logic added to support 'array' as a type.\n     * @example `toHaveType([1,2,3], 'array')` returns `true` as expected.\n     */\n    static toHaveType(actual, expectedType) {\n        return ((expectedType !== 'object' && typeof actual === expectedType) ||\n            (expectedType === 'array' && typeof actual === 'object' && Array.isArray(actual)) ||\n            (expectedType === 'object' && !Array.isArray(actual) && typeof actual === expectedType));\n    }\n    // Numbers\n    /** Answer if the actual value is greater than the expected value. */\n    static toBeGreaterThan(actual, expected) {\n        return typeof actual === 'number' && actual > expected;\n    }\n    /** Answer if the actual value is greater than or equal than the expected value. */\n    static toBeGreaterThanOrEqual(actual, expected) {\n        return typeof actual === 'number' && actual >= expected;\n    }\n    /** Answer if the actual value is lower than the expected value. */\n    static toBeLowerThan(actual, expected) {\n        return typeof actual === 'number' && actual < expected;\n    }\n    /** Answer if the actual value is lower than or equal than the expected value. */\n    static toBeLowerThanOrEqual(actual, expected) {\n        return typeof actual === 'number' && actual <= expected;\n    }\n    /** Answer if the actual value is between the from and to values (inclusive). */\n    static toBeBetween(actual, from, to) {\n        return typeof actual === 'number' && from <= actual && actual <= to;\n    }\n    /** Answer if the actual value is infinity (positive or negative). */\n    static toBeInfinity(actual) {\n        return typeof actual === 'number' && (actual === Infinity || actual === -Infinity);\n    }\n    /** Answer if the actual value is not a number. */\n    static toBeNaN(actual) {\n        return typeof actual === 'number' && Number.isNaN(actual);\n    }\n    /**\n     * Answer if the actual value is close to the expected value, by at least the number\n     * of digits given.\n     * @example `toBeCloseTo(4.0005, 4.0009, 3)` returns `true`, as there are 3\n     *      digits that are equal between actual and expected.\n     * If no amount of digits is given, 5 is taken by default.\n     */\n    static toBeCloseTo(actual, expected, numDigits) {\n        return (typeof actual === 'number' &&\n            Math.abs(expected - actual) < Math.pow(10, -numDigits) / 10);\n    }\n    // String\n    /** Answer if the actual value has expected as a substring. */\n    static toHaveSubstring(actual, expected) {\n        return typeof actual === 'string' && actual.indexOf(expected) >= 0;\n    }\n    /** Answer if the actual value starts with the expected string. */\n    static toStartWith(actual, expected) {\n        return typeof actual === 'string' && actual.startsWith(expected);\n    }\n    /** Answer if the actual value ends with the expected string. */\n    static toEndWith(actual, expected) {\n        return typeof actual === 'string' && actual.endsWith(expected);\n    }\n    /** Answer if the actual value matches the given regexp. */\n    static toMatch(actual, expected) {\n        return typeof actual === 'string' && expected.test(actual);\n    }\n    // Arrays\n    /** Answer if the actual value has a length of expected number. */\n    static toHaveLength(actual, expected) {\n        return typeof actual === 'object' && actual instanceof Array && actual.length === expected;\n    }\n    /** Answer if the actual value contains the expected element. */\n    static toContain(actual, expected) {\n        return typeof actual === 'object' && Array.isArray(actual) && actual.indexOf(expected) >= 0;\n    }\n    /**\n     * Answer if the actual value has a the expected element at a given position.\n     * Returns false if the position does not exist.\n     */\n    static toHaveAtPosition(actual, expected, position) {\n        return (typeof actual === 'object' &&\n            Array.isArray(actual) &&\n            actual.length > position &&\n            position >= 0 &&\n            actual[position] === expected);\n    }\n    /** Answer if all the element of the actual value satisfy a given criteria. */\n    static allToSatisfy(actual, criteria) {\n        return (typeof actual === 'object' &&\n            Array.isArray(actual) &&\n            actual.reduce((r, a) => criteria(a) && r, true));\n    }\n    /** Answer if any of the element of the actual value satisfy a given criteria. */\n    static anyToSatisfy(actual, criteria) {\n        return (typeof actual === 'object' &&\n            Array.isArray(actual) &&\n            actual.reduce((r, a) => criteria(a) || r, false));\n    }\n    /** Answer if a given amount of elements of the actual value satisfy a given criteria. */\n    static amountToSatisfy(actual, amount, criteria) {\n        return (typeof actual === 'object' &&\n            Array.isArray(actual) &&\n            actual.reduce((r, a) => (criteria(a) ? r + 1 : r), 0) === amount);\n    }\n    // Objects\n    /** Answer if the actual element has the given amount of properties. */\n    static toHavePropertyCount(actual, amount) {\n        return (typeof actual === 'object' &&\n            Object.keys(actual).filter((e) => Object.hasOwnProperty.call(actual, e)).length ===\n                amount);\n    }\n    /** Answer if an object has  at least all keys in the least. Combine with\n     * toHaveNoOtherThan to ensure exact key existence */\n    static toHaveAtLeast(actual, keys) {\n        if (typeof actual !== 'object')\n            return false;\n        for (const key of keys) {\n            if (!actual[key])\n                return false;\n        }\n        return true;\n    }\n    /** Answer if an object has no other than the given keys (although not all given\n     * need to be present). Combine with toHaveAtLeast to ensure exact key existence */\n    static toHaveNoOtherThan(actual, keys) {\n        if (typeof actual !== 'object')\n            return false;\n        for (const key of Object.keys(actual)) {\n            if (keys.indexOf(key) < 0) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /** Answer if the actual element has a property with the given name. */\n    static toHaveProperty(actual, propertyName) {\n        return (typeof actual === 'object' && Object.prototype.hasOwnProperty.call(actual, propertyName));\n    }\n    /** Answer if the actual element is an instance of a given class (using instanceof). */\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    static toBeInstanceOf(actual, classConstructor) {\n        return typeof actual === 'object' && actual instanceof classConstructor;\n    }\n}\n\n/**\n * This abstract class provides finished expectation behavior for\n * all actions based on the fact that it's subclass provides\n * an implementation for [[getResult]].\n */\nclass FinishedExpectation {\n    /** @inheritdoc [[IFinishedExpectation.orThrow]] */\n    orThrow(error) {\n        if (!this.getResult()) {\n            throw error;\n        }\n    }\n    /** @inheritdoc [[IFinishedExpectation.orYield]] */\n    orYield(value) {\n        return !this.getResult() ? value : undefined;\n    }\n    /** @inheritdoc [[IFinishedExpectation.andDoOr]] */\n    andDoOr(actionWhenTrue, actionWhenFalse) {\n        if (this.getResult()) {\n            actionWhenTrue();\n        }\n        else {\n            actionWhenFalse();\n        }\n    }\n    /** @inheritdoc [[IFinishedExpectation.andDo]] */\n    andDo(action) {\n        // eslint-disable-next-line @typescript-eslint/no-empty-function, no-empty-function\n        this.andDoOr(action, () => { });\n    }\n    /** @inheritdoc [[IFinishedExpectation.orDo]] */\n    orDo(action) {\n        // eslint-disable-next-line @typescript-eslint/no-empty-function, no-empty-function\n        this.andDoOr(() => { }, action);\n    }\n}\n\n/**\n * This module provides the [[Expectation]] class that implements\n * all interfaces for expectations.\n *\n * @author Alan Rodas Bonjour <alanrodas@gmail.com>\n *\n * @packageDocumentation\n */\nclass Expectation extends FinishedExpectation {\n    /**\n     * Create a new expectation for the given element.\n     *\n     * @param element The element to query to.\n     */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    constructor(element) {\n        super();\n        this.states = [];\n        this.element = element;\n        this.isNot = false;\n    }\n    /** @inheritdoc [[IGenericExpectation.not]] */\n    get not() {\n        this.isNot = !this.isNot;\n        return this;\n    }\n    /** @inheritdoc [[IGenericExpectation.toBe]] */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    toBe(value) {\n        return this.runMatcher('toBe', [value]);\n    }\n    /** @inheritdoc [[IGenericExpectation.toBeLike]] */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    toBeLike(value) {\n        return this.runMatcher('toBeLike', [value]);\n    }\n    /** @inheritdoc [[IGenericExpectation.toBeNull]] */\n    toBeNull() {\n        return this.runMatcher('toBeNull', []);\n    }\n    /** @inheritdoc [[IGenericExpectation.toBeDefined]] */\n    toBeDefined() {\n        return this.runMatcher('toBeDefined', []);\n    }\n    /** @inheritdoc [[IGenericExpectation.toBeUndefined]] */\n    toBeUndefined() {\n        return this.runMatcher('toBeUndefined', []);\n    }\n    /** @inheritdoc [[IGenericExpectation.toBeTruthy]] */\n    toBeTruthy() {\n        return this.runMatcher('toBeTruthy', []);\n    }\n    /** @inheritdoc [[IGenericExpectation.toBeFalsy]] */\n    toBeFalsy() {\n        return this.runMatcher('toBeFalsy', []);\n    }\n    /** @inheritdoc [[IGenericExpectation.toHaveType]] */\n    toHaveType(typeName) {\n        return this.runMatcher('toHaveType', [typeName]);\n    }\n    // INumberExpectation\n    /** @inheritdoc [[INumberExpectation.toBeGreaterThan]] */\n    toBeGreaterThan(value) {\n        return this.runMatcher('toBeGreaterThan', [value]);\n    }\n    /** @inheritdoc [[INumberExpectation.toBeGreaterThanOrEqual]] */\n    toBeGreaterThanOrEqual(value) {\n        return this.runMatcher('toBeGreaterThanOrEqual', [value]);\n    }\n    /** @inheritdoc [[INumberExpectation.toBeLowerThan]] */\n    toBeLowerThan(value) {\n        return this.runMatcher('toBeLowerThan', [value]);\n    }\n    /** @inheritdoc [[INumberExpectation.toBeLowerThanOrEqual]] */\n    toBeLowerThanOrEqual(value) {\n        return this.runMatcher('toBeLowerThanOrEqual', [value]);\n    }\n    /** @inheritdoc [[INumberExpectation.toBeBetween]] */\n    toBeBetween(from, to) {\n        return this.runMatcher('toBeBetween', [from, to]);\n    }\n    /** @inheritdoc [[INumberExpectation.toBeInfinity]] */\n    toBeInfinity() {\n        return this.runMatcher('toBeInfinity', []);\n    }\n    /** @inheritdoc [[INumberExpectation.toBeNaN]] */\n    toBeNaN() {\n        return this.runMatcher('toBeNaN', []);\n    }\n    /** @inheritdoc [[INumberExpectation.toBeCloseTo]] */\n    toBeCloseTo(value, digits = 5) {\n        return this.runMatcher('toBeCloseTo', [value, digits]);\n    }\n    // IStringExpectation\n    /** @inheritdoc [[IStringExpectation.toHaveSubstring]] */\n    toHaveSubstring(substring) {\n        return this.runMatcher('toHaveSubstring', [substring]);\n    }\n    /** @inheritdoc [[IStringExpectation.toStartWith]] */\n    toStartWith(start) {\n        return this.runMatcher('toStartWith', [start]);\n    }\n    /** @inheritdoc [[IStringExpectation.toEndWith]] */\n    toEndWith(end) {\n        return this.runMatcher('toEndWith', [end]);\n    }\n    /** @inheritdoc [[IStringExpectation.toMatch]] */\n    toMatch(regexp) {\n        return this.runMatcher('toMatch', [regexp]);\n    }\n    // IArrayExpectation\n    /** @inheritdoc [[IArrayExpectation.toHaveLength]] */\n    toHaveLength(count) {\n        return this.runMatcher('toHaveLength', [count]);\n    }\n    /** @inheritdoc [[IArrayExpectation.toContain]] */\n    toContain(value) {\n        return this.runMatcher('toContain', [value]);\n    }\n    /** @inheritdoc [[IArrayExpectation.toHaveAtPosition]] */\n    toHaveAtPosition(value, position) {\n        return this.runMatcher('toHaveAtPosition', [value, position]);\n    }\n    /** @inheritdoc [[IArrayExpectation.allToSatisfy]] */\n    allToSatisfy(criteria) {\n        return this.runMatcher('allToSatisfy', [criteria]);\n    }\n    /** @inheritdoc [[IArrayExpectation.anyToSatisfy]] */\n    anyToSatisfy(criteria) {\n        return this.runMatcher('anyToSatisfy', [criteria]);\n    }\n    /** @inheritdoc [[IArrayExpectation.amountToSatisfy]] */\n    amountToSatisfy(count, criteria) {\n        return this.runMatcher('amountToSatisfy', [count, criteria]);\n    }\n    // IObjectExpectation\n    /** @inheritdoc [[IObjectExpectation.toHavePropertyCount]] */\n    toHavePropertyCount(count) {\n        return this.runMatcher('toHavePropertyCount', [count]);\n    }\n    /** @inheritdoc [[IObjectExpectation.toHaveAtLeast]] */\n    toHaveAtLeast(keys) {\n        return this.runMatcher('toHaveAtLeast', keys, false);\n    }\n    /** @inheritdoc [[IObjectExpectation.toHaveNoOtherThan]] */\n    toHaveNoOtherThan(keys) {\n        return this.runMatcher('toHaveNoOtherThan', keys, false);\n    }\n    /** @inheritdoc [[IObjectExpectation.toHaveProperty]] */\n    toHaveProperty(propertyName) {\n        return this.runMatcher('toHaveProperty', [propertyName]);\n    }\n    /** @inheritdoc [[IObjectExpectation.toBeInstanceOf]] */\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    toBeInstanceOf(classConstructor) {\n        return this.runMatcher('toBeInstanceOf', [classConstructor]);\n    }\n    // IFinishedExpectation\n    /** @inheritdoc [[IFinishedExpectation.getResult]] */\n    getResult() {\n        return this.result;\n    }\n    /**\n     * Set the given value as the result of this\n     * expectation. The result is directly set, when\n     * no previous result existed, or joined with a\n     * logic conjunction with the previous result if\n     * a value already exists.\n     *\n     * @value The value to set.\n     */\n    setResult(value) {\n        if (this.result === undefined) {\n            this.result = value;\n        }\n        else {\n            this.result = this.result && value;\n        }\n    }\n    /**\n     * Run a matcher with the given name, passing the\n     * querying element as a first argument, and all additional\n     * given arguments. The result of running the matcher is stores,\n     * and a new state is pushed to this particular matcher.\n     *\n     * @param matcherName The matcher name to run\n     * @param args The arguments to pass to the matcher\n     */\n    runMatcher(matcherName, args, sparse = true) {\n        const matcherArgs = sparse ? [this.element, ...args] : [this.element, args];\n        const matcherResult = Matchers[matcherName].call(this, ...matcherArgs);\n        const result = this.isNot ? !matcherResult : matcherResult;\n        this.states.push({\n            matcher: matcherName,\n            args,\n            result\n        });\n        this.setResult(result);\n        return this;\n    }\n}\n\n/**\n * This module provides the [[JoinedExpectation]] class that provides\n * a way to create an expectation that has a result the result of\n * applying the joiner to every expectation in the result.\n *\n * @author Alan Rodas Bonjour <alanrodas@gmail.com>\n *\n * @packageDocumentation\n */\n/**\n * A joined expectation consist of multiple expectations joined by a specific\n * joiner function. A JoinedExpectation implements [[FinishedExpectation]],\n * where the result is calculated using the given joiner function.\n *\n * Currently two join forms are provided, [[Expectations/Expectations.expect.and]],\n * and [[Expectations/Expectations.expect.or]].\n */\nclass JoinedExpectation extends FinishedExpectation {\n    /**\n     * Create a new instance of a JoinedExpectation for the given set\n     * of expectations, using the provided joiner.\n     *\n     * @param expectations The expectations that ought to be joined.\n     * @param joiner The joiner to use to calculate the result.\n     */\n    constructor(expectations, joiner) {\n        super();\n        this.result = joiner(expectations);\n    }\n    /** @inheritdoc [[IFinishedExpectancy.getResult]] */\n    getResult() {\n        return this.result;\n    }\n}\n\n// eslint-disable-next-line max-len\n// eslint-disable-next-line prefer-arrow/prefer-arrow-functions, @typescript-eslint/explicit-module-boundary-types\nfunction expect(element) {\n    return new Expectation(element);\n}\n/**\n * This namespace provides additional hany operations for the expect function.\n */\n(function (expect) {\n    /**\n     * Create a new [[JoinedExpectation]] where all the expectations need to have a `true` result\n     * in order for the result of the joined one to be also `true`. That is, an expectation\n     * that joins it's components with a logical and.\n     * @param expectations A list of expectations that need to be fulfilled in order to\n     *      return `true` as result.\n     */\n    expect.and = (...expectations) => new JoinedExpectation(expectations, (exp) => exp.reduce((r, e) => r && e.getResult(), true));\n    /**\n     * Create a new [[JoinedExpectation]] where any of the expectations need to have a `true` result\n     * in order for the result of the joined one to be also `true`. That is, an expectation\n     * that joins it's components with a logical or.\n     * @param expectations A list of expectations where one need to be fulfilled in order to\n     *      return `true` as result.\n     */\n    expect.or = (...expectations) => new JoinedExpectation(expectations, (exp) => exp.reduce((r, e) => r || e.getResult(), false));\n})(expect || (expect = {}));\n\n/**\n * This object contains the default values for a [[Board]] and it's cells.\n * When a specific value is not given, the defaults are used.\n */\nconst Defaults = {\n    [Color.Blue]: 0,\n    [Color.Black]: 0,\n    [Color.Red]: 0,\n    [Color.Green]: 0\n};\nclass Cell extends TypedEmitter$1 {\n    /**\n     * Create a new instance of a cell with the given cell information.\n     * A cell should be given the [[Board]] it belongs to, as a cell cannot exist\n     * without a board. Additionally, at least the [x, y] coordinate of the cell\n     * within the board should be passed as the cell's information, and optionally,\n     * the amount of stones of the different colors in case they are not zero.\n     *\n     * When creating a cell and passing color information, you should prefer using\n     * the Color enum as a key, instead of the enum value as a string.\n     * @example\n     * ```\n     * new Cell(board, { x: 3, y: 2, [Color.Red]: 5, [Color.Green]: 1 });\n     * ```\n     * This allows for abstracting away the inner representation of the enum, and allow\n     * for changes in the future without impacting your code.\n     *\n     * @param board The board this cell belongs to.\n     * @param cellInfo The information for this cell, at least the X and Y coordinates,\n     *      and optionally, amount of stones for each color.\n     */\n    constructor(board, cellInfo) {\n        var _a, _b, _c, _d;\n        super();\n        this.board = board;\n        this.locationX = cellInfo.x;\n        this.locationY = cellInfo.y;\n        this.blueStones = (_a = cellInfo[Color.Blue]) !== null && _a !== void 0 ? _a : Defaults[Color.Blue];\n        this.blackStones = (_b = cellInfo[Color.Black]) !== null && _b !== void 0 ? _b : Defaults[Color.Black];\n        this.redStones = (_c = cellInfo[Color.Red]) !== null && _c !== void 0 ? _c : Defaults[Color.Red];\n        this.greenStones = (_d = cellInfo[Color.Green]) !== null && _d !== void 0 ? _d : Defaults[Color.Green];\n    }\n    /* ************* Cloning ************** */\n    /**\n     * Clone this cell. Pass a board in order to set the\n     * associated board of the cloned cell to that element.\n     *\n     * @param cloneBoard The Board the cloned cell will be associated to.\n     * @returns A new [[Cell]]\n     */\n    clone(newBoard) {\n        return new Cell(newBoard, {\n            x: this.x,\n            y: this.y,\n            [Color.Blue]: this.getStonesOf(Color.Blue),\n            [Color.Black]: this.getStonesOf(Color.Black),\n            [Color.Red]: this.getStonesOf(Color.Red),\n            [Color.Green]: this.getStonesOf(Color.Green)\n        });\n    }\n    /* ************* Accessors ************** */\n    /**\n     * Get or set the X location of this cell within the board.\n     *\n     * @warning The getter can be used always. The setter on the other hand\n     *      although exported, should not be used, as it's usage is reserved\n     *      for internal actions of the board only (It's used exclusively on\n     *      recalculating coordinates when the board resizes). Avoid the\n     *      setter at all cost.\n     *\n     * @param value The new value for the X coordinate.\n     *\n     * @returns This cells X coordinate within the board\n     */\n    get x() {\n        return this.locationX;\n    }\n    set x(value) {\n        this.locationX = value;\n    }\n    /**\n     * Get or set the Y location of this cell within the board.\n     *\n     * @warning The getter can be used always. The setter on the other hand\n     *      although exported, should not be used, as it's usage is reserved\n     *      for internal actions of the board only (It's used exclusively on\n     *      recalculating coordinates when the board resizes). Avoid the\n     *      setter at all cost.\n     *\n     * @param value The new value for the Y coordinate.\n     *\n     * @returns This cells Y coordinate within the board\n     */\n    get y() {\n        return this.locationY;\n    }\n    set y(value) {\n        this.locationY = value;\n    }\n    /**\n     * Get the amount of [[Color.Blue | blue]] stones of this cell.\n     * Or instead, set the amount of stones.\n     *\n     * @deprecated This is retain only for compatibility reasons.\n     *      If you need to access the amount of stones of a color,\n     *      use [[getStonesOf]] instead, passing the color as an argument.\n     *      So the preferred method for blue stones should be\n     *      ```\n     *      cell.getStonesOf(Color.Blue);\n     *      ```\n     *      For setting the stones of a color, use [[setStonesOf]] instead,\n     *      with the color and the new desired value. The preferred way for\n     *      blue stones should be:\n     *      ```\n     *      cell.setStonesOf(Color.Blue, amount);\n     *      ```\n     *\n     * @throws [[InvalidStonesAmount]] with the attempt set to `SetStones`\n     *      if the new amount of stones is lower than zero.\n     *\n     * @param value The new amount of [[Color.Blue | blue]] stones\n     *\n     * @returns The number of stones of [[Color.Blue]].\n     */\n    get a() {\n        return this.getStonesOf(Color.Blue);\n    }\n    /* istanbul ignore next */\n    set a(value) {\n        this.setStonesOf(Color.Blue, value);\n    }\n    /**\n     * Get the amount of [[Color.Black | black]] stones of this cell.\n     * Or instead, set the amount of stones.\n     *\n     * @deprecated This is retain only for compatibility reasons.\n     *      If you need to access the amount of stones of a color,\n     *      use [[getStonesOf]] instead, passing the color as an argument.\n     *      So the preferred method for black stones should be\n     *      ```\n     *      cell.getStonesOf(Color.Black);\n     *      ```\n     *      For setting the stones of a color, use [[setStonesOf]] instead,\n     *      with the color and the new desired value. The preferred way for\n     *      black stones should be:\n     *      ```\n     *      cell.setStonesOf(Color.Black, amount);\n     *      ```\n     *\n     * @throws [[InvalidStonesAmount]] with the attempt set to `SetStones`\n     *      if the new amount of stones is lower than zero.\n     *\n     * @param value The new amount of [[Color.Black | black]] stones\n     *\n     * @returns The number of stones of [[Color.Black]].\n     */\n    get n() {\n        return this.getStonesOf(Color.Black);\n    }\n    /* istanbul ignore next */\n    set n(value) {\n        this.setStonesOf(Color.Black, value);\n    }\n    /**\n     * Get the amount of [[Color.Red | red]] stones of this cell.\n     * Or instead, set the amount of stones.\n     *\n     * @deprecated This is retain only for compatibility reasons.\n     *      If you need to access the amount of stones of a color,\n     *      use [[getStonesOf]] instead, passing the color as an argument.\n     *      So the preferred method for red stones should be\n     *      ```\n     *      cell.getStonesOf(Color.Red);\n     *      ```\n     *      For setting the stones of a color, use [[setStonesOf]] instead,\n     *      with the color and the new desired value. The preferred way for\n     *      red stones should be:\n     *      ```\n     *      cell.setStonesOf(Color.Red, amount);\n     *      ```\n     *\n     * @throws [[InvalidStonesAmount]] with the attempt set to `SetStones`\n     *      if the new amount of stones is lower than zero.\n     *\n     * @param value The new amount of [[Color.Red | red]] stones\n     *\n     * @returns The number of stones of [[Color.Red]].\n     */\n    get r() {\n        return this.getStonesOf(Color.Red);\n    }\n    /* istanbul ignore next */\n    set r(value) {\n        this.setStonesOf(Color.Red, value);\n    }\n    /**\n     * Get the amount of [[Color.Green | green]] stones of this cell.\n     * Or instead, set the amount of stones.\n     *\n     * @deprecated This is retain only for compatibility reasons.\n     *      If you need to access the amount of stones of a color,\n     *      use [[getStonesOf]] instead, passing the color as an argument.\n     *      So the preferred method for green stones should be\n     *      ```\n     *      cell.getStonesOf(Color.Green);\n     *      ```\n     *      For setting the stones of a color, use [[setStonesOf]] instead,\n     *      with the color and the new desired value. The preferred way for\n     *      green stones should be:\n     *      ```\n     *      cell.setStonesOf(Color.Green, amount);\n     *      ```\n     *\n     * @throws [[InvalidStonesAmount]] with the attempt set to `SetStones`\n     *      if the new amount of stones is lower than zero.\n     *\n     * @param value The new amount of [[Color.Green | green]] stones\n     *\n     * @returns The number of stones of [[Color.Green]].\n     */\n    get v() {\n        return this.getStonesOf(Color.Green);\n    }\n    /* istanbul ignore next */\n    set v(value) {\n        this.setStonesOf(Color.Green, value);\n    }\n    /**\n     * Get the current X, Y coordinate of the cell within the board,\n     * as a two element array in the form `[x, y]`.\n     *\n     * @returns A two element array with the X and Y location of\n     *      this cell within the board.\n     */\n    get location() {\n        return [this.x, this.y];\n    }\n    /* ************* Managing & Querying Stones ************** */\n    /**\n     * Answer wether this cell contains stones of the given color.\n     * That is, if the amount of stones of the given color is greater\n     * than zero.\n     *\n     * @param color The color of the stones to check for existence.\n     *\n     * @returns `true` if the cell has stones of the given color, `false` otherwise.\n     */\n    hasStonesOf(color) {\n        return this.innerGetStones(color) > 0;\n    }\n    /**\n     * Answer with the amount of stones of the given color in this cell.\n     *\n     * @param color The color of the stones to retrieve the amount.\n     *\n     * @returns The amount of stones of the given color.\n     */\n    getStonesOf(color) {\n        return this.innerGetStones(color);\n    }\n    /**\n     * Set the amount of stones of the given color in this cell.\n     *\n     * @throws [[InvalidStonesAmount]] with the attempt set to `SetStones`\n     *      if the new amount of stones is lower than zero.\n     *\n     * @param color The color of the stones to set the amount.\n     * @param amount The amount of stones to set.\n     */\n    setStonesOf(color, amount) {\n        this.innerSetStones(color, amount, 'SetStones');\n    }\n    /**\n     * Add a given amount of stones of a particular color to this cell.\n     *\n     * @throws [[InvalidStonesAmount]] with the attempt set to `AddStones`\n     *      if the new amount of stones is lower or equal than zero.\n     *\n     * @param color The color of the stones to add to.\n     * @param amount The amount of stones to add.\n     */\n    addStones(color, amount = 1) {\n        expect(amount)\n            .toBeGreaterThan(0)\n            .orThrow(new InvalidStonesAmount('AddStones', color, amount, this));\n        this.innerSetStones(color, this.getStonesOf(color) + amount, undefined);\n    }\n    /**\n     * Remove a given amount of stones of a particular color to this cell.\n     *\n     * @throws [[InvalidStonesAmount]] with the attempt set to `AddStones`\n     *      if the new amount of stones is lower or equal than zero, or if the\n     *      amount of stones to remove is greater than the amount currently in\n     *      the cell.\n     *\n     * @param color The color of the stones to remove to.\n     * @param amount The amount of stones to remove.\n     */\n    removeStones(color, amount = 1) {\n        expect(amount)\n            .toBeGreaterThan(0)\n            .orThrow(new InvalidStonesAmount('RemoveStones', color, amount, this));\n        this.innerSetStones(color, this.getStonesOf(color) - amount, 'RemoveStones');\n    }\n    /**\n     * Answer wether this cell is empty, that is, it has no stones of any color.\n     * In other words, the amount of stones of any color is zero.\n     *\n     * @returns `true` if the cell is empty, `false` otherwise.\n     */\n    isEmpty() {\n        let hasNone = true;\n        Color.foreach((color) => {\n            if (this.hasStonesOf(color)) {\n                hasNone = false;\n            }\n        });\n        return hasNone;\n    }\n    /**\n     * Answer wether this cell has any stones, that is, it has any stones of any color.\n     * In other words, the amount of stones of any color is other than zero.\n     *\n     * @returns `true` if the cell has stones, `false` otherwise.\n     */\n    hasStones() {\n        return !this.isEmpty();\n    }\n    /**\n     * Answer the amount of stones of this cell. That is the total amount of\n     * stones, adding the number of stones of every color.\n     *\n     * @returns The total number of stones of the cell.\n     */\n    getStonesAmount() {\n        let total = 0;\n        Color.foreach((color) => {\n            total += this.getStonesOf(color);\n        });\n        return total;\n    }\n    /**\n     * Empty the cell, leaving the stone amount for each color to zero.\n     */\n    empty() {\n        this.blueStones = 0;\n        this.blackStones = 0;\n        this.redStones = 0;\n        this.greenStones = 0;\n    }\n    /* ************* Querying Location ************** */\n    /**\n     * Answer wether this cell is the cell below the head's location\n     * within the board.\n     *\n     * @returns `true` if the cell is below the head's location, `false` otherwise.\n     */\n    isHeadLocation() {\n        return this.board.headX === this.x && this.board.headY === this.y;\n    }\n    /**\n     * Answer wether this cell is at the border to the given direction\n     * at the board.\n     *\n     * @returns `true` if the cell is at the border to the given direction, `false` otherwise.\n     */\n    isAtBorderAt(direction) {\n        switch (direction) {\n            case Direction.North:\n                return this.y === this.board.height - 1;\n            case Direction.South:\n                return this.y === 0;\n            case Direction.East:\n                return this.x === this.board.width - 1;\n            case Direction.West:\n                return this.x === 0;\n            /* istanbul ignore next */\n            default:\n                return false;\n        }\n    }\n    /**\n     * Return the neighbor of this cell to the given direction, that is, another cell.\n     * If the cell is at the border at the given direction, then `undefined` is returned.\n     *\n     * @param direction The direction to which to get the neighbor from.\n     *\n     * @returns The neighbor cell at the given direction, or `undefined`\n     *      if the neighbor does not exist\n     */\n    neighborTo(direction) {\n        const [deltaX, deltaY] = this.innerGetDeltaByDirection(direction, 1);\n        if (this.isAtBorderAt(direction))\n            return undefined;\n        return this.board.getCell(this.x + deltaX, this.y + deltaY);\n    }\n    /**\n     * Return the neighbor of this cell to the given diagonal, that is, another cell.\n     * If the cell is at the border at the given diagonal, then `undefined` is returned.\n     *\n     * @param vertical The vertical direction to which to get the neighbor from.\n     * @param horizontal The horizontal direction to which to get the neighbor from.\n     *\n     * @returns The neighbor cell at the given diagonal, or `undefined`\n     *      if the neighbor does not exist.\n     */\n    neighborDiagonalTo(vertical, horizontal) {\n        if (this.isAtBorderAt(vertical) || this.isAtBorderAt(horizontal))\n            return undefined;\n        const verticalDelta = this.innerGetDeltaByDirection(vertical, 1)[1];\n        const horizontalDelta = this.innerGetDeltaByDirection(horizontal, 1)[0];\n        return this.board.getCell(this.x + horizontalDelta, this.y + verticalDelta);\n    }\n    /**\n     * Retrieve all the neighbors of the current cell. Only existing neighbors are\n     * returned. The returned neighbors may be 'orthogonal' (the default), where\n     * only orthogonal neighbors are returned, 'diagonal', where only diagonal\n     * diagonal neighbors are returned, or 'both' where both orthogonal and diagonal\n     * neighbors are returned.\n     *\n     * @param location One of 'orthogonal', 'diagonal' or 'both'.\n     *\n     * @returns A list of neighbors of the current cell.\n     */\n    neighbors(location = 'orthogonal') {\n        const neighbors = [];\n        Direction.foreach((dir) => {\n            const nextDir = Direction.next(dir);\n            if (!this.isAtBorderAt(dir) && location !== 'diagonal') {\n                neighbors.push(this.neighborTo(dir));\n            }\n            if (!this.isAtBorderAt(dir) &&\n                !this.isAtBorderAt(nextDir) &&\n                location !== 'orthogonal') {\n                neighbors.push(this.neighborDiagonalTo((Direction.isVertical(dir) ? dir : nextDir), (Direction.isVertical(dir) ? nextDir : dir)));\n            }\n        });\n        return neighbors;\n    }\n    /**\n     * Retrieve a string representation of the cell, mainly for debugging purposes.\n     */\n    /* istanbul ignore next */\n    toString() {\n        return (`x: ${this.x} y: ${this.y} > ` +\n            `${this.getStonesOf(Color.Blue)} B  ${this.getStonesOf(Color.Black)} K  ` +\n            `${this.getStonesOf(Color.Red)} R  ${this.getStonesOf(Color.Green)} G`);\n    }\n    /**\n     * Retrieve the amount of stones of a given color for this cell.\n     *\n     * @param color The color to retrieve the amount of.\n     */\n    innerGetStones(color) {\n        switch (color) {\n            case Color.Blue:\n                return this.blueStones;\n            case Color.Black:\n                return this.blackStones;\n            case Color.Red:\n                return this.redStones;\n            case Color.Green:\n                return this.greenStones;\n            /* istanbul ignore next */\n            default:\n                return 0;\n        }\n    }\n    /**\n     * Retrieve a two element array with the delta value of a neighbor cell to a\n     * specific direction. The delta is considered using the `deltaValue` argument,\n     * thus increasing or decreasing by that amount depending on the given direction.\n     * @param direction The direction to use to calculate the delta value.\n     * @param deltaValue The delta number to use when calculating.\n     */\n    innerGetDeltaByDirection(direction, deltaValue) {\n        switch (direction) {\n            case Direction.East:\n                return [deltaValue, 0];\n            case Direction.West:\n                return [-deltaValue, 0];\n            case Direction.North:\n                return [0, deltaValue];\n            case Direction.South:\n                return [0, -deltaValue];\n            /* istanbul ignore next */\n            default:\n                return [0, 0];\n        }\n    }\n    /**\n     * Set the amount of stones of the given color for this cell, to the given amount.\n     *\n     * @throws [[InvalidStonesAmount]] with the given performed action, when the\n     *      amount of stones to set is lower than zero.\n     *\n     * @param color The color of the stones to set.\n     * @param amount The amount to set the stones of that color.\n     * @param performedAction The attempt to set the error to in case of failure.\n     */\n    innerSetStones(color, amount, performedAction) {\n        expect(amount)\n            .toBeGreaterThanOrEqual(0)\n            .orThrow(new InvalidStonesAmount(performedAction, color, amount, this));\n        const oldBlueStones = this.blueStones;\n        const oldBlackStones = this.blackStones;\n        const oldRedStones = this.redStones;\n        const oldGreenStones = this.greenStones;\n        switch (color) {\n            case Color.Blue:\n                this.blueStones = amount;\n                break;\n            case Color.Black:\n                this.blackStones = amount;\n                break;\n            case Color.Red:\n                this.redStones = amount;\n                break;\n            case Color.Green:\n                this.greenStones = amount;\n                break;\n        }\n        this.emit(Cell.onStonesChanged, { x: this.locationX, y: this.locationY }, {\n            [Color.Blue]: this.blueStones,\n            [Color.Black]: this.blackStones,\n            [Color.Red]: this.redStones,\n            [Color.Green]: this.greenStones\n        }, {\n            [Color.Blue]: oldBlueStones,\n            [Color.Black]: oldBlackStones,\n            [Color.Red]: oldRedStones,\n            [Color.Green]: oldGreenStones\n        });\n    }\n}\n/**\n * This event is thrown whenever an action that alters the stones in\n * the cell is performed. Listeners of this action are expected to conform to\n * [[OnCellStonesChanged]].\n *\n * The actions that trigger this callback include:\n * * Setting the [[a]] attribute of an instance.\n * * Setting the [[n]] attribute of an instance.\n * * Setting the [[r]] attribute of an instance.\n * * Setting the [[v]] attribute of an instance.\n * * Calling [[setStonesOf]] on an instance with any color and value.\n * * Calling [[addStones]] on an instance with any color and value.\n * * Calling [[removeStones]] on an instance with any color and value.\n * * Calling [[empty]] on an instance.\n *\n * @event\n */\nCell.onStonesChanged = Symbol('onStonesChanged');\n\n/**\n * Create a two-dimensional matrix where all positions are filled using the given\n * generator.\n *\n * @throws Error if the width or the height given are zero or negative.\n *\n * @param width - The number of rows of the matrix\n * @param height - The number of columns of the matrix\n * @param initialValueGenerator - A function that given the i,j position of the element returns\n *  the element to store the matrix at that position\n * @returns A `T[][]` where T is the type of the elements in the matrix.\n */\nconst Matrix = (width, height, initialValueGenerator) => {\n    if (width < 1 || height < 1) {\n        throw new Error('The width and height of a matrix need to be positive values');\n    }\n    const generatedMatrix = [];\n    for (let i = 0; i < width; i++) {\n        generatedMatrix[i] = [];\n        for (let j = 0; j < height; j++) {\n            generatedMatrix[i][j] = initialValueGenerator ? initialValueGenerator(i, j) : undefined;\n        }\n    }\n    return generatedMatrix;\n};\n\n/**\n * This object contains the default values for a [[Board]].\n * When a specific value is not given, the defaults are used.\n */\nconst Defaults$1 = {\n    width: 4,\n    height: 4,\n    head: [0, 0]\n};\n/**\n * This class models a Gobstones Board with all it's associated behavior.\n * Note that an instance of this class implements [[BoardDefinition]],\n * so it can be used as a valid description of a board in the [Gobstones\n * Interpreter](http://github.com/gobstones/gobstones-interpreter) and is\n * returned by [The Gobstones GBB Parser](http://github.com/gobstones/gobstones-gbb-parser).\n * All newer developments are expected to use this class instead of a particular ad-hoc\n * representation for a board.\n *\n * Note that this class provides a [[board]] attribute, that used to be the standard\n * way to access the cells of the boards, but this new class is intended to be used\n * as an ADT. So it's expected that you use the provided functions for accessing\n * cells, columns ands rows, instead of using the board attribute. Be aware of\n * deprecation warnings.\n *\n * The class provides a set of method for accessing and querying the properties\n * of the board and cell contents, modify the head location, the size and the\n * cell contents. This class works in conjunction with the [[Cell]] class. Note\n * that internal representation of a board might change, so do not rely on\n * representation, and abstract away of it as much as possible.\n */\nclass Board extends TypedEmitter$1 {\n    constructor(width, height, head, initialState) {\n        super();\n        this.boardWidth = width !== null && width !== void 0 ? width : Defaults$1.width;\n        this.boardHeight = height !== null && height !== void 0 ? height : Defaults$1.height;\n        this.headXLocation = (head !== null && head !== void 0 ? head : Defaults$1.head)[0];\n        this.headYLocation = (head !== null && head !== void 0 ? head : Defaults$1.head)[1];\n        expect\n            .and(expect(this.boardWidth).toBeGreaterThan(0), expect(this.boardHeight).toBeGreaterThan(0), expect(this.headX).toBeGreaterThanOrEqual(0).toBeLowerThan(this.boardWidth), expect(this.headY).toBeGreaterThanOrEqual(0).toBeLowerThan(this.boardHeight))\n            .orThrow(new InvalidBoardDescription(this.boardHeight, this.boardWidth, [\n            this.headX,\n            this.headY\n        ]));\n        const cells = new Map((initialState !== null && initialState !== void 0 ? initialState : []).map((cellDef) => {\n            expect.and(expect(cellDef.x).toBeGreaterThanOrEqual(0).toBeLowerThan(this.boardWidth), expect(cellDef.y).toBeGreaterThanOrEqual(0).toBeLowerThan(this.boardHeight));\n            return [`${cellDef.x}-${cellDef.y}`, cellDef];\n        }));\n        this.boardData = Matrix(this.boardWidth, this.boardHeight, (i, j) => { var _a; return new Cell(this, (_a = cells.get(`${i}-${j}`)) !== null && _a !== void 0 ? _a : { x: i, y: j }); });\n    }\n    /* ************* Cloning ************** */\n    /**\n     * Clone this board, returning a new one with the same characteristics.\n     *\n     * @returns A new Board.\n     */\n    clone() {\n        const cellStates = this.foldCells((cells, cell) => {\n            cells.push({\n                x: cell.x,\n                y: cell.y,\n                [Color.Blue]: cell.getStonesOf(Color.Blue),\n                [Color.Black]: cell.getStonesOf(Color.Black),\n                [Color.Red]: cell.getStonesOf(Color.Red),\n                [Color.Green]: cell.getStonesOf(Color.Green)\n            });\n            return cells;\n        }, []);\n        return new Board(this.width, this.height, this.head, cellStates);\n    }\n    /* ************* Accessors ************** */\n    /**\n     * Useful to test is an untyped object is a board. Returns true for any board.\n     */\n    get isBoard() {\n        return true;\n    }\n    /**\n     * The board format. Always: GBB/1.0 as it's derived from the GBB format.\n     *\n     * @deprecated\n     * In the future, the version information would not be available on a board,\n     * as it derives from the GBB format, but the way in which this instance\n     * is produces might come from any other location or format other than GBB,\n     * and is not at all relevant to the user.\n     *\n     * @see [[Board/BoardDefinition.BoardDefinition.format | BoardDefinition.format]]\n     */\n    get format() {\n        return 'GBB/1.0';\n    }\n    /**\n     * Get or sets the width of this board.\n     *\n     * @see [[Board/BoardDefinition.BoardDefinition.width | BoardDefinition.width]]\n     *\n     * @throws [[InvalidSizeChange]] with the attempt as `Resize`\n     * if attempting to set the attribute and the given value is\n     * lower or equal to zero.\n     *\n     * @returns The width of the board, always greater than 0.\n     */\n    get width() {\n        return this.boardWidth;\n    }\n    set width(value) {\n        this.innerChangeSize(value, this.boardHeight, false, 'Resize');\n    }\n    /**\n     * Get or sets the height of this board.\n     *\n     * @see [[Board/BoardDefinition.BoardDefinition.height | BoardDefinition.height]]\n     *\n     * @throws [[InvalidSizeChange]] with the attempt as `Resize`\n     * if attempting to set the attribute and the given value is\n     * lower or equal to zero.\n     *\n     * @returns The height of the board, always greater than 0.\n     */\n    get height() {\n        return this.boardHeight;\n    }\n    set height(value) {\n        this.innerChangeSize(this.boardWidth, value, false, 'Resize');\n    }\n    /**\n     * Get or set the head location of this board as an `[x, y]` coordinate.\n     *\n     * @see [[Board/BoardDefinition.BoardDefinition.head | BoardDefinition.head]]\n     *\n     * @throws [[LocationFallsOutsideBoard]] with the attempt as `SetLocation`\n     *      if attempting to set the attribute and the given cell location as\n     *      `[x, y]` has `x < 0 || x > width` or `y < 0 || y > width`.\n     *\n     * @returns The head location as a two element array `[x, y]`, that satisfies\n     *      `0 <= x < width && 0 <= y < height`\n     */\n    get head() {\n        return [this.headX, this.headY];\n    }\n    set head(value) {\n        this.innerSetHeadLocation(value, 'SetLocation');\n    }\n    /**\n     * The head's X coordinate of this board.\n     *\n     * @returns The board X's coordinate, which satisfies `0 <= x < width`\n     *\n     * @see [[Board/BoardDefinition.BoardDefinition.head | BoardDefinition.head]]\n     */\n    get headX() {\n        return this.headXLocation;\n    }\n    /**\n     * The head's Y coordinate of this board\n     *\n     * @returns The board X's coordinate, which satisfies `0 <= y < height`\n     *\n     * @see [[Board/BoardDefinition.BoardDefinition.head | BoardDefinition.head]]\n     */\n    get headY() {\n        return this.headYLocation;\n    }\n    /**\n     * Obtain the cells of the board as an array of `width` elements, each\n     * of which is an array of `height` elements, each of which is a [[Cell]],\n     * or in another sense, a [[Matrix]] of [[Cell | Cells]].\n     *\n     * This is retain only for compatibility reasons.\n     *\n     * @see [[Board/BoardDefinition.BoardDefinition.board | BoardDefinition.board]]\n     *\n     * @deprecated\n     * Note that this method of accessing the board is deprecated and should not\n     * be used. If you need a cell matrix, in such a way that the first\n     * array represents the columns, and each array inside the cells of such a column,\n     * the method [[getColumns]] should be used. Instead if you are attempting to\n     * access a specific cell as `board[x][y]`, use the [[getCell]] method instead as\n     * `getCell(x, y)`.\n     *\n     * @returns A matrix of cells.\n     */\n    /* istanbul ignore next */\n    get board() {\n        return this.boardData;\n    }\n    getCell(x, y) {\n        return this.innerGetCell(x !== null && x !== void 0 ? x : this.headX, y !== null && y !== void 0 ? y : this.headY);\n    }\n    /**\n     * Get an array of [[Cell | Cells]] for the specific column.\n     *\n     * @throws [[LocationFallsOutsideBoard]] with the attempt as `ReadColumn`\n     *      if the given column number is lower than cero or greater than of equal\n     *      than the [[width]].\n     *\n     * @param columnNumber The column number to obtain the cell from.\n     *\n     * @returns A [[Cell]] array for the given column.\n     */\n    getColumn(columnNumber) {\n        return this.innerGetColumn(columnNumber);\n    }\n    /**\n     * Get an array of [[Cell | Cells]] for the specific row.\n     *\n     * Note that with the current implementation this takes more\n     * time than accessing by column, but this might change in future\n     * implementations.\n     *\n     * @throws [[LocationFallsOutsideBoard]] with the attempt as `ReadRow`\n     *      if the given column number is lower than cero or greater of equal\n     *      than the [[height]].\n     *\n     * @param rowNumber The row number to obtain the cell from.\n     *\n     * @returns A [[Cell]] array for the given row.\n     */\n    getRow(rowNumber) {\n        return this.innerGetRow(rowNumber);\n    }\n    /**\n     * Get an array of arrays of [[Cell | Cells]] for the board, that can be\n     * iterated by column, that is, an array of columns.\n     *\n     * @returns A [[Cell]] array of arrays where each element is a column,\n     *      and each column is a list of cells.\n     */\n    getColumns() {\n        return this.innerGetColumns();\n    }\n    /**\n     * Get an array of arrays of [[Cell | Cells]] for the board, that can be\n     * iterated by rows, that is, an array of rows.\n     *\n     * Note that with the current implementation this takes more\n     * time than accessing by column, but this might change in future\n     * implementations.\n     *\n     * @returns A [[Cell]] array of arrays where each element is a row,\n     *      and each row is a list of cells.\n     */\n    getRows() {\n        const rows = [];\n        for (let row = 0; row < this.height; row++) {\n            rows.push(this.getRow(row));\n        }\n        return rows;\n    }\n    /**\n     * Fold a value over all the cells of a board.\n     * The order of the cells should not be assumed, as any order might be used.\n     *\n     * Note that with the current implementation, the cells are iterated by column\n     * starting from 0,0 to the one in the North-East corner.\n     *\n     * @param f A function to apply to each cells. The function expect to receive\n     *  the current accumulated value at the moment, the currently iterated cell,\n     *  and the row and column position for such a cell and returning a value of\n     *  the same type as the accumulated value.\n     * @param initialValue The initial value to fold against.\n     */\n    foldCells(f, initialValue) {\n        let currentValue = initialValue;\n        for (let c = 0; c < this.boardData.length; c++) {\n            const column = this.boardData[c];\n            for (let r = 0; r < column.length; r++) {\n                const cell = column[r];\n                currentValue = f(currentValue, cell, r, c);\n            }\n        }\n        return currentValue;\n    }\n    /**\n     * Map all the cells of the board, generating a matrix of values.\n     * The order of the cells should not be assumed, as any order might be used.\n     *\n     * Note that with the current implementation, the cells are iterated by column\n     * starting from 0,0 to the one in the North-East corner.\n     *\n     * @param f A function to apply to each cells. The function expect to receive\n     *   the currently iterated cell, and the row and column position for such a cell,\n     *   and returning any value.\n     */\n    mapCells(f) {\n        return this.foldCells((previousMatrix, cell, row, column) => {\n            previousMatrix[column][row] = f(cell, row, column);\n            return previousMatrix;\n        }, Matrix(this.width, this.height));\n    }\n    /**\n     * Filter all the cells of the board, generating an array of Cells.\n     * The order of the cells should not be assumed, as any order might be used.\n     *\n     * Note that with the current implementation, the cells are iterated by column\n     * starting from 0,0 to the one in the North-East corner.\n     *\n     * @param f A function to apply to each cells. The function expect to receive\n     *   the currently iterated cell, and the row and column position for such a cell,\n     *   that returns a boolean, returning `true` if the cell is ought to be in the result,\n     *   and `false`otherwise.\n     */\n    filterCells(f) {\n        return this.foldCells((previousList, cell, row, column) => {\n            if (f(cell, row, column)) {\n                previousList.push(cell);\n            }\n            return previousList;\n        }, []);\n    }\n    /**\n     * Execute a function over each of the cells of the board.\n     * The order of the cells should not be assumed, as any order might be used.\n     *\n     * Note that with the current implementation, the cells are iterated by column\n     * starting from 0,0 to the one in the North-East corner.\n     *\n     * @param f A function to apply to each cells. The function expect to receive\n     *   the currently iterated cell, and the row and column position for such a cell.\n     */\n    foreachCells(f) {\n        this.foldCells((_, cell, row, column) => {\n            f(cell, row, column);\n        }, undefined);\n    }\n    /* ************* Clean Board ************** */\n    /**\n     * Clean the board contents, leaving all cells empty.\n     */\n    clean() {\n        this.foreachCells((cell) => cell.empty());\n    }\n    /* ************* Modifying Head ************** */\n    /**\n     * Change the head coordinate, by moving the head to the adjacent cell\n     * in the given direction. Thus given a direction `dir`, and considering\n     * that the head is at `[x, y]` coordinate, the new head location is calculated as:\n     * * for `dir === Direction.North` the new head is at `[x, y+1]`.\n     * * for `dir === Direction.South` the new head is at `[x, y-1]`.\n     * * for `dir === Direction.East` the new head is at `[x+1, y]`.\n     * * for `dir === Direction.West` the new head is at `[x-1, y]`.\n     *\n     * @throws [[LocationFallsOutsideBoard]] with the attempt as `Move`\n     *      if moving the head to the given direction makes it fall\n     *      outside the board.\n     *\n     * @param dir The direction in which to move the head to.\n     */\n    moveHeadTo(dir) {\n        const [deltaX, deltaY] = this.innerGetDeltaByDirection(dir, 1);\n        this.innerSetHeadLocation([this.headX + deltaX, this.headY + deltaY], 'Move');\n    }\n    /**\n     * Change the head coordinate location to the coordinate at the edge at\n     * given direction. Thus given a direction `dir`, and considering that\n     * the head is at `[x, y]` coordinate, the new head coordinate is\n     * calculated as:\n     * * for `dir === Direction.North` the new head is at `[x, height-1]`.\n     * * for `dir === Direction.South` the new head is at `[x, 0]`.\n     * * for `dir === Direction.East` the new head is at `[width-1, y]`.\n     * * for `dir === Direction.West` the new head is at `[0, y]`.\n     *\n     * @param dir The direction in which to move the head to.\n     */\n    moveHeadToEdgeAt(dir) {\n        const [deltaX, deltaY] = this.innerGetDeltaByDirection(dir);\n        this.innerSetHeadLocation([this.headX + deltaX, this.headY + deltaY], undefined);\n    }\n    /* ************* Modifying Size ************** */\n    /**\n     * Change the size of the board to the given width and height.\n     * If `fromOriginCorner` is `true`, and cells are being added, they are\n     * added to the West and/or South (depending on the new size value), if\n     * `false` they are added to the East and/or North. The same happens when removing,\n     * that is, when the new size is lower that the current one, for any of width or\n     * height.\n     * Note that changing the size of the board by setting the [[width]] or [[height]]\n     * attributes act as using this same method with `fromOriginCorner` set to `false`.\n     * Thus, this methods provides a more generic way of modifying the size, allowing to\n     * add columns or rows at the beginning of the board instead of the end.\n     *\n     * Note that if the given size is smaller than the current size, the location\n     * of the head is adjusted in any case that the location falls outside the board\n     * given the new size.\n     *\n     * @throws [[InvalidBoardDescription]] if any of the given\n     *      `width` or `height` are lower than or equal to zero.\n     *\n     * @param width The new width of the board.\n     * @param height The new height of the board.\n     * @param fromOriginCorner Wether to change the size considering the\n     *      change being performed from the origin cell instead of the North-East corner.\n     */\n    changeSizeTo(width, height, fromOriginCorner = false) {\n        this.innerChangeSize(width, height, fromOriginCorner, 'Resize');\n    }\n    /**\n     * Add a new column to the board at the given direction.\n     * Note that this is equivalent of adding one column\n     * by calling [[addColumns]] with argument 1 for the same direction\n     * as given.\n     *\n     * If no direction is given, the column is added to the East.\n     *\n     * @param dir The direction where to add the new column.\n     */\n    addColumn(dir = Direction.East) {\n        this.addColumns(1, dir);\n    }\n    /**\n     * Add a given amount of new columns to the board at the given direction.\n     * Note that, this is equivalent as increasing the size of the board with\n     * [[changeSizeTo]] where the new width corresponds to the current width\n     * plus the number of new columns. If the given direction is `Direction.East`,\n     * then the new columns are added at the beginning of the board (that is,\n     * using `changeSizeTo` with `fromOriginCell` as `true`).\n     *\n     * If no direction is given, the columns are added to the East.\n     *\n     * @param amount The number of columns to add.\n     * @param dir The direction where to add the new column.\n     */\n    addColumns(amount, dir = Direction.East) {\n        this.innerChangeSize(this.width + amount, this.height, dir === Direction.West, undefined);\n    }\n    /**\n     * Remove a column to the board at the given direction.\n     * Note that this is equivalent to removing one column\n     * by calling [[removeColumns]] with argument 1 for the same direction\n     * as given.\n     *\n     * If no direction is given, the column is removed from the East.\n     *\n     * @param dir The direction where to remove the new column.\n     */\n    removeColumn(dir = Direction.East) {\n        this.removeColumns(1, dir);\n    }\n    /**\n     * Remove given number of columns from the board at the given direction.\n     * Note that, this is equivalent as decreasing the size of the board with\n     * [[changeSizeTo]] where the new width corresponds to the current width\n     * minus the number of columns to remove. If the given direction is\n     * `Direction.East`, then the new columns are removed from the beginning of\n     * the board (that is, using `changeSizeTo` with `fromOriginCell` as `true`).\n     *\n     * If no direction is given, the columns are removed from the East.\n     *\n     * @param amount The amount of columns to remove.\n     * @param dir The direction where to remove the new column.\n     */\n    removeColumns(amount, dir = Direction.East) {\n        this.innerChangeSize(this.width - amount, this.height, dir === Direction.West, 'RemoveColumn');\n    }\n    /**\n     * Add a new row to the board at the given direction.\n     * Note that this is equivalent of adding one row\n     * by calling [[addRows]] with argument 1 for the same direction\n     * as given.\n     *\n     * If no direction is given, the row is added to the North.\n     *\n     * @param dir The direction where to add the new column.\n     */\n    addRow(dir = Direction.North) {\n        this.addRows(1, dir);\n    }\n    /**\n     * Add a given amount of new rows to the board at the given direction.\n     * Note that, this is equivalent as increasing the size of the board with\n     * [[changeSizeTo]] where the new height corresponds to the current height\n     * plus the number of new rows. If the given direction is `Direction.South`,\n     * then the new columns are added at the beginning of the board (that is,\n     * using `changeSizeTo` with `fromOriginCell` as `true`).\n     *\n     * If no direction is given, the rows are added to the North.\n     *\n     * @param amount The number of rows to add.\n     * @param dir The direction where to add the new row.\n     */\n    addRows(amount, dir = Direction.North) {\n        this.innerChangeSize(this.width, this.height + amount, dir === Direction.South, undefined);\n    }\n    /**\n     * Remove a row to the board at the given direction.\n     * Note that this is equivalent to removing one row\n     * by calling [[removeRows]] with argument 1 for the same direction\n     * as given.\n     *\n     * If no direction is given, the row is removed from the North.\n     *\n     * @param dir The direction where to remove the new row.\n     */\n    removeRow(dir = Direction.North) {\n        this.removeRows(1, dir);\n    }\n    /**\n     * Remove given number of rows from the board at the given direction.\n     * Note that, this is equivalent as decreasing the size of the board with\n     * [[changeSizeTo]] where the new height corresponds to the current height\n     * minus the number of rows to remove. If the given direction is\n     * `Direction.South`, then the new columns are removed from the beginning of\n     * the board (that is, using `changeSizeTo` with `fromOriginCell` as `true`).\n     *\n     * If no direction is given, the rows are removed from the North.\n     *\n     * @param amount The amount of rows to remove.\n     * @param dir The direction where to remove the new row.\n     */\n    removeRows(amount, dir = Direction.North) {\n        this.innerChangeSize(this.width, this.height - amount, dir === Direction.South, 'RemoveRow');\n    }\n    /**\n     * Retrieve a string representation of the board as a pretty print.\n     * Useful for debugging purposes mostly.\n     *\n     * Note that this only pretty prints boards where\n     * there are less than ten stones in each cell. Other board\n     * may print incorrectly.\n     */\n    /* istanbul ignore next */\n    toString() {\n        var _a;\n        let board = '';\n        const cellString = (cell, line) => {\n            const sep = cell.isHeadLocation() ? '|' : '¦';\n            return line === 0\n                ? `${sep} ${cell.getStonesOf(Color.Blue)} B ${cell.getStonesOf(Color.Black)} K ${sep}`\n                : `${sep} ${cell.getStonesOf(Color.Red)} R ${cell.getStonesOf(Color.Green)} G ${sep}`;\n        };\n        for (let r = this.height - 1; r >= 0; r--) {\n            board += '  ';\n            for (let c = 0; c < this.width; c++) {\n                board +=\n                    this.boardData[c][r].isHeadLocation() || ((_a = this.boardData[c][r + 1]) === null || _a === void 0 ? void 0 : _a.isHeadLocation())\n                        ? '-----------'\n                        : '- - - - - -';\n            }\n            board += '\\n  ';\n            for (let c = 0; c < this.width; c++) {\n                board += cellString(this.boardData[c][r], 0);\n            }\n            board += `\\n${r} `;\n            for (let c = 0; c < this.width; c++) {\n                board += cellString(this.boardData[c][r], 1);\n            }\n            board += '\\n';\n        }\n        board += '  ';\n        for (let c = 0; c < this.width; c++) {\n            board += this.boardData[c][0].isHeadLocation() ? '-----------' : '- - - - - -';\n        }\n        board += '\\n  ';\n        for (let c = 0; c < this.width; c++) {\n            board += `     ${c}     `;\n        }\n        return board;\n    }\n    /* ************* Private ************** */\n    /**\n     * Retrieve all the columns from the board. This is another way of\n     * saying, retrieve all the cells as a 2 dimensional matrix, where\n     * the outer element corresponds to a column, and the inner one to\n     * the cells in that column.\n     *\n     * @returns An array of arrays of cells with the board information\n     */\n    innerGetColumns() {\n        return this.boardData;\n    }\n    /**\n     * Retrieve all the cells in a given column.\n     *\n     * @throws [[InvalidCellReading]] with the attempt as `ReadColumn`\n     *      if the given column number is lower than zero or greater\n     *      or equal to the board width.\n     *\n     * @returns An array of cells with the cells in the given column.\n     */\n    innerGetColumn(column) {\n        expect(column)\n            .toBeGreaterThanOrEqual(0)\n            .toBeLowerThan(this.width)\n            .orThrow(new InvalidCellReading('ReadColumn', [column, 0]));\n        return this.boardData[column];\n    }\n    /**\n     * Retrieve all the cells in a given row.\n     *\n     * @throws [[InvalidCellReading]] with the attempt as `ReadRow`\n     *      if the given row number is lower than zero or greater\n     *      or equal to the board height.\n     *\n     * @returns An array of cells with the cells in the given row.\n     */\n    innerGetRow(row) {\n        expect(row)\n            .toBeGreaterThanOrEqual(0)\n            .toBeLowerThan(this.height)\n            .orThrow(new InvalidCellReading('ReadRow', [0, row]));\n        const rowData = [];\n        for (let c = 0; c < this.width; c++) {\n            rowData.push(this.boardData[c][row]);\n        }\n        return rowData;\n    }\n    /**\n     * Retrieve the cells in a given location.\n     *\n     * @throws [[InvalidCellReading]] with the attempt as `ReadCell`\n     *      if the location given as `[x, y]`  has `x` that is lower\n     *      than zero or greater or equal to the board width, or `y`\n     *      that is lower than zero or greater or equal to the board height.\n     *\n     * @returns A cell for the given location\n     */\n    innerGetCell(x, y) {\n        expect(x)\n            .toBeGreaterThanOrEqual(0)\n            .toBeLowerThan(this.width)\n            .orThrow(new InvalidCellReading('ReadCell', [x, y]));\n        expect(y)\n            .toBeGreaterThanOrEqual(0)\n            .toBeLowerThan(this.height)\n            .orThrow(new InvalidCellReading('ReadCell', [x, y]));\n        return this.boardData[x][y];\n    }\n    /**\n     * Change the head location to the specific cell location.\n     *\n     * @throws [[LocationFallsOutsideBoard]] with the attempt as `performedAction`\n     *      if the given cell location as `[x, y]` has `x < 0 || x > width`\n     *      or `y < 0 || y > width`.\n     *\n     * @param location The location to move the head to.\n     */\n    innerSetHeadLocation(location, performedAction) {\n        expect\n            .and(expect(location[0]).toBeGreaterThanOrEqual(0).toBeLowerThan(this.width), expect(location[1]).toBeGreaterThanOrEqual(0).toBeLowerThan(this.height))\n            .orThrow(new LocationFallsOutsideBoard(performedAction, location, this.head));\n        const oldHeadX = this.headXLocation;\n        const oldHeadY = this.headYLocation;\n        this.headXLocation = location[0];\n        this.headYLocation = location[1];\n        this.emit(Board.onHeadMoved, [this.headXLocation, this.headYLocation], [oldHeadX, oldHeadY]);\n    }\n    /**\n     * Change the size of the board to the given width and height.\n     *\n     * @warning Changing size is an expensive operation with the current implementation,\n     *      and probably with any other representation for the current API. All things\n     *      considered, changing the size of the Board is not an operation that is\n     *      performed multiple time, nor expected immediacy, so the penalties\n     *      in performance are acceptable.\n     *\n     * @throws [[InvalidBoardDescription]] if any of the given\n     *      `width` or `height` are lower tor equal than zero.\n     *\n     * @param width The new width of the board.\n     * @param height The new height of the board.\n     * @param fromOriginCorner Wether to change the size considering the\n     *      change being performed from the origin cell instead of the North-East corner.\n     */\n    innerChangeSize(width, height, fromOriginCorner = false, attempt) {\n        expect\n            .and(expect(height).toBeGreaterThan(0), expect(width).toBeGreaterThan(0))\n            .orThrow(new InvalidSizeChange(attempt, this.boardWidth, this.boardHeight, width, height));\n        // Gather state of change\n        const oldHeight = this.boardHeight;\n        const oldWidth = this.boardWidth;\n        const oldHeadX = this.headXLocation;\n        const oldHeadY = this.headYLocation;\n        this.boardHeight = height;\n        this.boardWidth = width;\n        // Firstly fix columns\n        if (this.boardWidth >= oldWidth) {\n            // Add columns or leave as it\n            for (let k = 0; k < this.boardWidth - oldWidth; k++) {\n                if (fromOriginCorner) {\n                    this.boardData.unshift([]);\n                }\n                else {\n                    this.boardData.push([]);\n                }\n            }\n        }\n        else {\n            // Remove columns\n            for (let k = 0; k < oldWidth - this.boardWidth; k++) {\n                if (fromOriginCorner) {\n                    this.boardData.shift();\n                }\n                else {\n                    this.boardData.pop();\n                }\n            }\n        }\n        // Then fix cells in columns\n        for (let c = 0; c < this.boardWidth; c++) {\n            const columnInitialLength = this.boardData[c].length;\n            if (this.boardHeight >= oldHeight) {\n                // Add cell or leave as it\n                for (let k = 0; k < this.boardHeight - columnInitialLength; k++) {\n                    if (fromOriginCorner) {\n                        // Note that Cell location does not matter at this point, so 0,0 is OK.\n                        this.boardData[c].unshift(new Cell(this, { x: 0, y: 0 }));\n                    }\n                    else {\n                        this.boardData[c].push(new Cell(this, { x: 0, y: 0 }));\n                    }\n                }\n            }\n            else {\n                // Remove cells\n                for (let k = 0; k < columnInitialLength - this.boardHeight; k++) {\n                    if (fromOriginCorner) {\n                        this.boardData[c].shift();\n                    }\n                    else {\n                        this.boardData[c].pop();\n                    }\n                }\n            }\n        }\n        // Then fix all cell locations\n        // Note that our previously added 0,0 cells get fixed at this point.\n        this.foreachCells((cell, row, column) => {\n            cell.x = column;\n            cell.y = row;\n        });\n        if (fromOriginCorner) {\n            if (this.boardWidth >= oldWidth) {\n                // cells added first\n                const newHeadX = oldHeadX + (this.boardWidth - oldWidth);\n                this.headXLocation = newHeadX < this.boardWidth ? newHeadX : this.boardWidth - 1;\n            }\n            if (this.boardWidth < oldWidth) {\n                // cells were removed first\n                const newHeadX = oldHeadX - (oldWidth - this.boardWidth);\n                this.headXLocation = newHeadX >= 0 ? newHeadX : 0;\n            }\n            if (this.boardHeight >= oldHeight) {\n                // cells added first\n                const newHeadY = oldHeadY + (this.boardHeight - oldHeight);\n                this.headYLocation = newHeadY < this.boardHeight ? newHeadY : this.boardHeight - 1;\n            }\n            if (this.boardHeight < oldHeight) {\n                // cells were removed first\n                const newHeadY = oldHeadY - (oldHeight - this.boardHeight);\n                this.headYLocation = newHeadY >= 0 ? newHeadY : 0;\n            }\n        }\n        else {\n            // The added case should not alter head\n            if (this.boardWidth < oldWidth) {\n                // cells were removed last\n                this.headXLocation = oldHeadX < this.boardWidth ? oldHeadX : this.boardWidth - 1;\n            }\n            if (this.boardHeight < oldHeight) {\n                // cells were removed last\n                this.headYLocation = oldHeadY < this.boardHeight ? oldHeadY : this.boardHeight - 1;\n            }\n        }\n        this.emit(Board.onSizeChanged, { width: this.boardWidth, height: this.boardHeight }, [this.headXLocation, this.headYLocation], fromOriginCorner, { width: oldWidth, height: oldHeight }, [oldHeadX, oldHeadY]);\n    }\n    /**\n     * Retrieve a two element array with the delta value to move the head to given a\n     * specific direction. The delta is considered using the `deltaValue` argument,\n     * thus increasing or decreasing by that amount depending on the given direction.\n     * If no deltaValue is given, the delta becomes the maximum possible value for the\n     * given board, that is, the delta between the head location and the border in the\n     * given direction.\n     * @param direction The direction to use to calculate the delta value.\n     * @param deltaValue The delta number to use when calculating, or undefined if\n     *      the maximum available is ought to be used.\n     */\n    innerGetDeltaByDirection(direction, deltaValue) {\n        switch (direction) {\n            case Direction.East:\n                return [deltaValue !== null && deltaValue !== void 0 ? deltaValue : this.width - 1 - this.headXLocation, 0];\n            case Direction.West:\n                return [deltaValue ? -deltaValue : -this.headXLocation, 0];\n            case Direction.North:\n                return [0, deltaValue !== null && deltaValue !== void 0 ? deltaValue : this.height - 1 - this.headYLocation];\n            case Direction.South:\n                return [0, deltaValue ? -deltaValue : -this.headYLocation];\n            /* istanbul ignore next */\n            default:\n                return [0, 0];\n        }\n    }\n}\n/**\n * This event is thrown whenever an action that alters the position of the head\n * is performed. Listeners of this action are expected to conform to\n * [[OnBoardHeadMovedCallback]].\n *\n * The actions that trigger this callback include:\n * * Setting the [[head]] attribute of an instance.\n * * Calling [[moveHeadTo]] on an instance with any direction.\n * * Calling [[moveHeadToEdgeAt]] on an instance with any direction.\n *\n * Note however that there is a particular case where the head moves, but this\n * event is not triggered. Such particular case happens when the board is resized\n * is such a way that, the location where the head was at, no longer exists as\n * a valid cell of the board, thus, the head is assigned to a new location.\n * If you wish to consider such a case, consider also listening to [[onSizeChanged]].\n * @event\n */\nBoard.onHeadMoved = Symbol('onHeadMoved');\n/**\n * This event is thrown whenever an action that alters the size of the board\n * is performed. Listeners of this action are expected to conform to\n * [[OnBoardSizeChangedCallback]]\n *\n * The actions that trigger this callback include:\n * * Setting the [[width]] attribute of an instance.\n * * Setting the [[height]] attribute of an instance.\n * * Calling [[changeSizeTo]] on an instance with any values\n *      (even with the same width and height as the actual size)\n * * Calling [[addColumn]] on an instance.\n * * Calling [[addColumns]] on an instance.\n * * Calling [[removeColumn]] on an instance.\n * * Calling [[removeColumns]] on an instance.\n * * Calling [[addRow]] on an instance.\n * * Calling [[addRows]] on an instance.\n * * Calling [[removeRow]] on an instance.\n * * Calling [[removeRows]] on an instance.\n * @event\n */\nBoard.onSizeChanged = Symbol('onSizeChanged');\n\nvar flat = flatten;\nflatten.flatten = flatten;\nflatten.unflatten = unflatten;\n\nfunction isBuffer$1 (obj) {\n  return obj &&\n    obj.constructor &&\n    (typeof obj.constructor.isBuffer === 'function') &&\n    obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n  return key\n}\n\nfunction flatten (target, opts) {\n  opts = opts || {};\n\n  const delimiter = opts.delimiter || '.';\n  const maxDepth = opts.maxDepth;\n  const transformKey = opts.transformKey || keyIdentity;\n  const output = {};\n\n  function step (object, prev, currentDepth) {\n    currentDepth = currentDepth || 1;\n    Object.keys(object).forEach(function (key) {\n      const value = object[key];\n      const isarray = opts.safe && Array.isArray(value);\n      const type = Object.prototype.toString.call(value);\n      const isbuffer = isBuffer$1(value);\n      const isobject = (\n        type === '[object Object]' ||\n        type === '[object Array]'\n      );\n\n      const newKey = prev\n        ? prev + delimiter + transformKey(key)\n        : transformKey(key);\n\n      if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n        (!opts.maxDepth || currentDepth < maxDepth)) {\n        return step(value, newKey, currentDepth + 1)\n      }\n\n      output[newKey] = value;\n    });\n  }\n\n  step(target);\n\n  return output\n}\n\nfunction unflatten (target, opts) {\n  opts = opts || {};\n\n  const delimiter = opts.delimiter || '.';\n  const overwrite = opts.overwrite || false;\n  const transformKey = opts.transformKey || keyIdentity;\n  const result = {};\n\n  const isbuffer = isBuffer$1(target);\n  if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n    return target\n  }\n\n  // safely ensure that the key is\n  // an integer.\n  function getkey (key) {\n    const parsedKey = Number(key);\n\n    return (\n      isNaN(parsedKey) ||\n      key.indexOf('.') !== -1 ||\n      opts.object\n    ) ? key\n      : parsedKey\n  }\n\n  function addKeys (keyPrefix, recipient, target) {\n    return Object.keys(target).reduce(function (result, key) {\n      result[keyPrefix + delimiter + key] = target[key];\n\n      return result\n    }, recipient)\n  }\n\n  function isEmpty (val) {\n    const type = Object.prototype.toString.call(val);\n    const isArray = type === '[object Array]';\n    const isObject = type === '[object Object]';\n\n    if (!val) {\n      return true\n    } else if (isArray) {\n      return !val.length\n    } else if (isObject) {\n      return !Object.keys(val).length\n    }\n  }\n\n  target = Object.keys(target).reduce(function (result, key) {\n    const type = Object.prototype.toString.call(target[key]);\n    const isObject = (type === '[object Object]' || type === '[object Array]');\n    if (!isObject || isEmpty(target[key])) {\n      result[key] = target[key];\n      return result\n    } else {\n      return addKeys(\n        key,\n        result,\n        flatten(target[key], opts)\n      )\n    }\n  }, {});\n\n  Object.keys(target).forEach(function (key) {\n    const split = key.split(delimiter).map(transformKey);\n    let key1 = getkey(split.shift());\n    let key2 = getkey(split[0]);\n    let recipient = result;\n\n    while (key2 !== undefined) {\n      if (key1 === '__proto__') {\n        return\n      }\n\n      const type = Object.prototype.toString.call(recipient[key1]);\n      const isobject = (\n        type === '[object Object]' ||\n        type === '[object Array]'\n      );\n\n      // do not write over falsey, non-undefined values if overwrite is false\n      if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n        return\n      }\n\n      if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n        recipient[key1] = (\n          typeof key2 === 'number' &&\n          !opts.object ? [] : {}\n        );\n      }\n\n      recipient = recipient[key1];\n      if (split.length > 0) {\n        key1 = getkey(split.shift());\n        key2 = getkey(split[0]);\n      }\n    }\n\n    // unflatten again for 'messy objects'\n    recipient[key1] = unflatten(target[key], opts);\n  });\n\n  return result\n}\n\nconst flatten$1 = flat.flatten;\nconst unflatten$1 = flat.unflatten;\n\n/**\n * This module provides mechanisms to support basic localization of strings.\n * This allows for error messages and CLI to support different languages\n * without much effort.\n *\n * Note that this module does not provide localization for the Gobstones Language\n * but for this tool internally, and should not be confused with other classes\n * exposed by this package. If you want to learn about how to translate the\n * Gobstones Language see [[models_Translator | the Translator module]] and\n * the [[models_Definition | the Definition module]].\n *\n * @author Alan Rodas Bonjour <alanrodas@gmail.com>\n *\n * @packageDocumentation\n */\n/**\n * A Translation consist of an object that hold the state of the current\n * locale being used, and allows for switching between different locales\n * and obtain translated strings.\n *\n * The translation expects a [[Locale]] to be given as the language,\n * and, if constructed with the flatten options, flattens it to allow\n * dot notation access to the different strings in the locale object.\n *\n * Note that this object does not provide mechanisms for maintaining\n * multiple languages registered, nor should be used to hold the user defined\n * language as a state object. Rather, this should be created once, setted\n * with the desired language, and used always through the full library.\n *\n */\nclass Translator {\n    /**\n     * Create a new instance of this translator that uses the\n     *\n     */\n    constructor(availableTranslations, defaultLocale, shouldFlat = true, currentLocale) {\n        if (!availableTranslations) {\n            throw new Error(`The translations cannot be null nor undefined`);\n        }\n        if (!defaultLocale) {\n            throw new Error(`The default translation cannot be null nor undefined`);\n        }\n        if (!availableTranslations[defaultLocale]) {\n            throw new Error(`The default translation must be one of the translations available`);\n        }\n        this.availableTranslations = availableTranslations;\n        this.defaultLocale = defaultLocale;\n        this.flatten = shouldFlat;\n        this.setLocale(currentLocale !== null && currentLocale !== void 0 ? currentLocale : defaultLocale);\n    }\n    /**\n     * Get the default locale name\n     *\n     * @returns The default locale.\n     */\n    getDefaultLocale() {\n        return this.defaultLocale;\n    }\n    /**\n     * Get all the available translations\n     *\n     * @returns The default locale.\n     */\n    getAvailableTranslations() {\n        return this.availableTranslations;\n    }\n    /**\n     * Get the current using locale\n     *\n     * @returns The current locale name.\n     */\n    getLocale() {\n        return this.currentLocaleName;\n    }\n    /**\n     * Answer wether or not a given locale name is registered.\n     *\n     * @param locale The locale name to check for existence.\n     *\n     * @returns `true` if the locale exists, `false`otherwise.\n     */\n    hasLocale(locale) {\n        return !!this.availableTranslations[locale];\n    }\n    /**\n     * Set the current language to the given locale.\n     *\n     * @param locale A locale to use as the current language.\n     */\n    setLocale(locale) {\n        if (!this.availableTranslations[locale]) {\n            throw new Error(`The locale \"${locale}\" is not available`);\n        }\n        this.currentLocaleName = locale;\n        this.currentLocale = this.flatten\n            ? flatten$1(this.availableTranslations[this.currentLocaleName])\n            : this.availableTranslations[this.currentLocaleName];\n    }\n    /**\n     * Translate a specific key to the currently used locale, replacing\n     * any interpolation matchers by the given interpolations.\n     *\n     * @param key The key to use to obtain the translated text\n     * @param interpolations If given, keys of this object will be used\n     *      to replace any interpolation matcher in the translated text\n     *      (any text in ${}) by the value of the corresponding key.\n     *\n     * @returns A translated string\n     */\n    translate(key, interpolations) {\n        let value = this.currentLocale[key];\n        if (!value || typeof value !== 'string') {\n            return key;\n        }\n        for (const each in interpolations || []) {\n            value = value.replace(`\\${${each}}`, `${interpolations[each]}`);\n        }\n        return value;\n    }\n    /**\n     * Translate a specific key to the currently used locale, by selecting the\n     * corresponding pluralization, determined by the amount given and replacing\n     * any interpolation matchers by the given interpolations.\n     * Pluralization is selected based on the las part of the key in such a form\n     * that it contains the amount as part of the key, or \"n\" for other number.\n     * .e.g. given the key \"test.key\" plurals attempt to match \"test.key.0\",\n     * \"test.key.1\" and so on, or \"test.key.n\".\n     *\n     * @param amount The amount given for pluralization\n     * @param key The key to use to obtain the translated text\n     * @param interpolations If given, keys of this object will be used\n     *      to replace any interpolation matcher in the translated text\n     *      (any text in ${}) by the value of the corresponding key.\n     *\n     * @returns A translated string\n     */\n    pluralize(amount, key, interpolations) {\n        if (amount % 1 !== amount) {\n            throw new Error('pluralization can only be used for integers');\n        }\n        if (this.currentLocale[key + '.' + amount.toString()]) {\n            return this.translate(this.currentLocale[key + amount.toString()], interpolations);\n        }\n        if (this.currentLocale[key + '.n']) {\n            return this.translate(this.currentLocale[key + amount.toString()], interpolations);\n        }\n        return key;\n    }\n}\n\n/* eslint-disable max-len */\n/**\n * This module provides a set of common regular expressions that are useful\n * through the Gobstones Language environment, including but not limited to\n * regular expressions for valid identifiers. This considers all unicode cases,\n * and support languages that uses any latin scripting (english, spanish, french,\n * german and so on), cyrillic scripting (russian, ukranian and other slavic languages),\n * arab scripting (arabian, persian, thaana, etc.), hangul (corean), hiragana and\n * katakana characters (japanese), logograms for CJK languages (chinese characters,\n * japanese kanjis) and others.\n *\n * Some considerations follow:\n * * Identifiers in Gobstones were separated into lower identifiers (lowerId), that\n * is to say, words that start with a lowercase character, and upper identifiers,\n * that is, words that start with an uppercase character.\n * * The former has been extended here to support any scripting that distinguishes between\n * upper and lowercase forms\n * * For scripting that do not have casing, words starting with any character that is a letter\n * is a valid identifier both for places where upperIds and lowerIds were used, with the\n * exception of parameters and variable names, where the word must start with an underscore\n * (as a sigil) and be followed by a letter is such a scripting.\n *\n * Some examples follow:\n * ```\n * // Valid uppercase identifiers (upperId)\n * [Red, Rojo, Ñandú, Öblast, Солнце]\n *\n * // Valid lowercase identifiers (lowerId)\n * [stones, bolitas, ñoqui, über, солнце]\n *\n * // Non alphabetic identifiers (nonAlphaId)\n * [شمس, 太阳]\n *\n * // Non alphabetic identifiers with sigil (sigiledNonAlphaId)\n * [شمس_, _太阳]    // Note the RTL spelling of arabic\n * ```\n *\n * Thus, the following are now represented to the exports here:\n * * A Number in gobstones must be written in ASCII numerals\n * * A Value Literal name may be an upperId or a nonAlphaId.\n * * A Procedure name may be an upperId or a nonAlphaId.\n * * A Function name may be a lowerId or a nonAlphaId\n * * A Type name may be an upperId or a nonAlphaId.\n * * A Type Constructor may be an upperId or a nonAlphaId.\n * * A Type field may be a lowerId or a nonAlphaId.\n * * A Variable name may be a lowerId or a sigiledNonAlphaId.\n * * A Parameter name may be a lowerId or a sigiledNonAlphaId.\n *\n * The sigiled version is indeed needed for variables and parameters, as a standalone\n * nonAlphaId cannot be identified as a variable/parameter or a 0-arity constructor of a type.\n * Such ambiguity cannot be resolved in a reasonable parser and so the tradeoff is to start with\n * the sigil underscore. Other ambiguities may be solved with lookahead techniques.\n *\n * A last consideration for readers of the implementation: Currently not all browsers have support\n * for RegExp that use the \\p and \\P escape sequences for matching unicode properties, and as\n * such, a transpiled version is used. The ES compatible version is provided in the documentation\n * in each case. The transpilation has been performed manually by using Regexpu which can\n * be found at [https://github.com/mathiasbynens/regexpu](https://github.com/mathiasbynens/regexpu).\n *\n * @author Alan Rodas Bonjour <alanrodas@gmail.com>\n *\n * @packageDocumentation\n */\n/**\n * Numbers are only ASCII characters for digits\n */\nconst number = /[1-9][0-9]*/;\n/**\n * Any word starting with an uppercase letter (or titlecase for some languages),\n * that may be followed by any amount of unicode letters or decimal numbers, or ASCII underscore.\n *\n * ES Form:\n * ```\n * /(\\p{Uppercase_Letter}|\\p{Titlecase_Letter})[\\p{Letter}\\p{Decimal_Number}_]* /u;\n * ```\n */\nconst upperId = /((?:[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\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\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\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\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\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\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\\uA7C2\\uA7C4-\\uA7C7\\uA7C9\\uA7F5\\uFF21-\\uFF3A]|\\uD801[\\uDC00-\\uDC27\\uDCB0-\\uDCD3]|\\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])|[\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC])(?:[0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BEF\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F29\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7CA\\uA7F5-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\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\\uDD30-\\uDD39\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC66-\\uDC6F\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF39]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCE9\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\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]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])*/;\n/**\n * Any word starting with an lowercase letter, that may be followed\n * by any amount of unicode letters or decimal numbers, or ASCII underscore.\n *\n * ES Form:\n * ```\n * /\\p{Lowercase_Letter}[\\p{Letter}\\p{Decimal_Number}_]* /u;\n * ```\n */\nconst lowerId = /(?:[a-z\\xB5\\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-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\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\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\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\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7B\\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\\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\\uA771-\\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\\uA7C3\\uA7C8\\uA7CA\\uA7F6\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB68\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A]|\\uD801[\\uDC28-\\uDC4F\\uDCD8-\\uDCFB]|\\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]|\\uD83A[\\uDD22-\\uDD43])(?:[0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BEF\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F29\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7CA\\uA7F5-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\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\\uDD30-\\uDD39\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC66-\\uDC6F\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF39]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCE9\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\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]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])*/;\n/**\n * Any word starting with a non upper, title or lowercase letter (that is, a letter\n * in a scripting that do not distinguishes between upper and lowercase forms),\n * that may be followed by any amount of unicode letters or decimal numbers, or ASCII underscore.\n *\n * ES Form:\n * ```\n * /\\p{Other_Letter}[\\p{Letter}\\p{Decimal_Number}_]* /u;\n * ```\n */\nconst nonAlphabeticId = /(?:[\\xAA\\xBA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\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\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\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-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1100-\\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\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A\\uA62B\\uA66E\\uA6A0-\\uA6E5\\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\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\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-\\uFF6F\\uFF71-\\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\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC50-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\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\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A]|\\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\\uDEC0-\\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\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF4A\\uDF50]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD838[\\uDD00-\\uDD2C\\uDD4E\\uDEC0-\\uDEEB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BEF\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F29\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7CA\\uA7F5-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\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\\uDD30-\\uDD39\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC66-\\uDC6F\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF39]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCE9\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\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]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])*/;\n/**\n * Any word starting with an underscore and followed by a non upper, title or lowercase\n * letter (that is, a letter in a scripting that do not distinguishes between upper and\n * lowercase forms), that may be followed by any amount of unicode letters or decimal\n * numbers, or ASCII underscore.\n *\n * ES Form:\n * ```\n * /_\\p{Other_Letter}[\\p{Letter}\\p{Decimal_Number}_]* /u;\n * ```\n */\nconst sigiledNonAlphabeticId = /_(?:[\\xAA\\xBA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\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\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\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-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1100-\\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\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A\\uA62B\\uA66E\\uA6A0-\\uA6E5\\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\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\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-\\uFF6F\\uFF71-\\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\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC50-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\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\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A]|\\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\\uDEC0-\\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\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF4A\\uDF50]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD838[\\uDD00-\\uDD2C\\uDD4E\\uDEC0-\\uDEEB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BEF\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F29\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7CA\\uA7F5-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\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\\uDD30-\\uDD39\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC66-\\uDC6F\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF39]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCE9\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\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]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])*/;\n/**\n * This helper matches any of the above identifiers, that is, anything that is a word.\n *\n * ES Form:\n * ```\n * /(\\p{Letter}|_)[\\p{Letter}\\p{Decimal_Number}_]* /u;\n * ```\n */\nconst identifier = /((?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\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\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\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-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7CA\\uA7F5-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\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\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A]|\\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\\uDEC0-\\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\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDEC0-\\uDEEB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])|_)(?:[0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BEF\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F29\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7CA\\uA7F5-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\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\\uDD30-\\uDD39\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC66-\\uDC6F\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF39]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCE9\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\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]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])*/;\n\nexport { Board, BoardError, Cell, Color, Direction, InvalidBoardDescription, InvalidCellReading, InvalidSizeChange, InvalidStonesAmount, LocationFallsOutsideBoard, Matrix, Translator, TypedEmitter$1 as TypedEmitter, deepEquals, expect, flatten$1 as flatten, identifier, lowerId, nonAlphabeticId, number, sigiledNonAlphabeticId, unflatten$1 as unflatten, upperId };\n//# sourceMappingURL=index.js.map\n",null,null,null,null,"(function(root, factory) {\n    if (typeof module === 'object' && module.exports) {\n        module.exports = factory();\n    } else {\n        root.nearley = factory();\n    }\n}(this, function() {\n\n    function Rule(name, symbols, postprocess) {\n        this.id = ++Rule.highestId;\n        this.name = name;\n        this.symbols = symbols;        // a list of literal | regex class | nonterminal\n        this.postprocess = postprocess;\n        return this;\n    }\n    Rule.highestId = 0;\n\n    Rule.prototype.toString = function(withCursorAt) {\n        var symbolSequence = (typeof withCursorAt === \"undefined\")\n                             ? this.symbols.map(getSymbolShortDisplay).join(' ')\n                             : (   this.symbols.slice(0, withCursorAt).map(getSymbolShortDisplay).join(' ')\n                                 + \" ● \"\n                                 + this.symbols.slice(withCursorAt).map(getSymbolShortDisplay).join(' ')     );\n        return this.name + \" → \" + symbolSequence;\n    }\n\n\n    // a State is a rule at a position from a given starting point in the input stream (reference)\n    function State(rule, dot, reference, wantedBy) {\n        this.rule = rule;\n        this.dot = dot;\n        this.reference = reference;\n        this.data = [];\n        this.wantedBy = wantedBy;\n        this.isComplete = this.dot === rule.symbols.length;\n    }\n\n    State.prototype.toString = function() {\n        return \"{\" + this.rule.toString(this.dot) + \"}, from: \" + (this.reference || 0);\n    };\n\n    State.prototype.nextState = function(child) {\n        var state = new State(this.rule, this.dot + 1, this.reference, this.wantedBy);\n        state.left = this;\n        state.right = child;\n        if (state.isComplete) {\n            state.data = state.build();\n            // Having right set here will prevent the right state and its children\n            // form being garbage collected\n            state.right = undefined;\n        }\n        return state;\n    };\n\n    State.prototype.build = function() {\n        var children = [];\n        var node = this;\n        do {\n            children.push(node.right.data);\n            node = node.left;\n        } while (node.left);\n        children.reverse();\n        return children;\n    };\n\n    State.prototype.finish = function() {\n        if (this.rule.postprocess) {\n            this.data = this.rule.postprocess(this.data, this.reference, Parser.fail);\n        }\n    };\n\n\n    function Column(grammar, index) {\n        this.grammar = grammar;\n        this.index = index;\n        this.states = [];\n        this.wants = {}; // states indexed by the non-terminal they expect\n        this.scannable = []; // list of states that expect a token\n        this.completed = {}; // states that are nullable\n    }\n\n\n    Column.prototype.process = function(nextColumn) {\n        var states = this.states;\n        var wants = this.wants;\n        var completed = this.completed;\n\n        for (var w = 0; w < states.length; w++) { // nb. we push() during iteration\n            var state = states[w];\n\n            if (state.isComplete) {\n                state.finish();\n                if (state.data !== Parser.fail) {\n                    // complete\n                    var wantedBy = state.wantedBy;\n                    for (var i = wantedBy.length; i--; ) { // this line is hot\n                        var left = wantedBy[i];\n                        this.complete(left, state);\n                    }\n\n                    // special-case nullables\n                    if (state.reference === this.index) {\n                        // make sure future predictors of this rule get completed.\n                        var exp = state.rule.name;\n                        (this.completed[exp] = this.completed[exp] || []).push(state);\n                    }\n                }\n\n            } else {\n                // queue scannable states\n                var exp = state.rule.symbols[state.dot];\n                if (typeof exp !== 'string') {\n                    this.scannable.push(state);\n                    continue;\n                }\n\n                // predict\n                if (wants[exp]) {\n                    wants[exp].push(state);\n\n                    if (completed.hasOwnProperty(exp)) {\n                        var nulls = completed[exp];\n                        for (var i = 0; i < nulls.length; i++) {\n                            var right = nulls[i];\n                            this.complete(state, right);\n                        }\n                    }\n                } else {\n                    wants[exp] = [state];\n                    this.predict(exp);\n                }\n            }\n        }\n    }\n\n    Column.prototype.predict = function(exp) {\n        var rules = this.grammar.byName[exp] || [];\n\n        for (var i = 0; i < rules.length; i++) {\n            var r = rules[i];\n            var wantedBy = this.wants[exp];\n            var s = new State(r, 0, this.index, wantedBy);\n            this.states.push(s);\n        }\n    }\n\n    Column.prototype.complete = function(left, right) {\n        var copy = left.nextState(right);\n        this.states.push(copy);\n    }\n\n\n    function Grammar(rules, start) {\n        this.rules = rules;\n        this.start = start || this.rules[0].name;\n        var byName = this.byName = {};\n        this.rules.forEach(function(rule) {\n            if (!byName.hasOwnProperty(rule.name)) {\n                byName[rule.name] = [];\n            }\n            byName[rule.name].push(rule);\n        });\n    }\n\n    // So we can allow passing (rules, start) directly to Parser for backwards compatibility\n    Grammar.fromCompiled = function(rules, start) {\n        var lexer = rules.Lexer;\n        if (rules.ParserStart) {\n          start = rules.ParserStart;\n          rules = rules.ParserRules;\n        }\n        var rules = rules.map(function (r) { return (new Rule(r.name, r.symbols, r.postprocess)); });\n        var g = new Grammar(rules, start);\n        g.lexer = lexer; // nb. storing lexer on Grammar is iffy, but unavoidable\n        return g;\n    }\n\n\n    function StreamLexer() {\n      this.reset(\"\");\n    }\n\n    StreamLexer.prototype.reset = function(data, state) {\n        this.buffer = data;\n        this.index = 0;\n        this.line = state ? state.line : 1;\n        this.lastLineBreak = state ? -state.col : 0;\n    }\n\n    StreamLexer.prototype.next = function() {\n        if (this.index < this.buffer.length) {\n            var ch = this.buffer[this.index++];\n            if (ch === '\\n') {\n              this.line += 1;\n              this.lastLineBreak = this.index;\n            }\n            return {value: ch};\n        }\n    }\n\n    StreamLexer.prototype.save = function() {\n      return {\n        line: this.line,\n        col: this.index - this.lastLineBreak,\n      }\n    }\n\n    StreamLexer.prototype.formatError = function(token, message) {\n        // nb. this gets called after consuming the offending token,\n        // so the culprit is index-1\n        var buffer = this.buffer;\n        if (typeof buffer === 'string') {\n            var lines = buffer\n                .split(\"\\n\")\n                .slice(\n                    Math.max(0, this.line - 5), \n                    this.line\n                );\n\n            var nextLineBreak = buffer.indexOf('\\n', this.index);\n            if (nextLineBreak === -1) nextLineBreak = buffer.length;\n            var col = this.index - this.lastLineBreak;\n            var lastLineDigits = String(this.line).length;\n            message += \" at line \" + this.line + \" col \" + col + \":\\n\\n\";\n            message += lines\n                .map(function(line, i) {\n                    return pad(this.line - lines.length + i + 1, lastLineDigits) + \" \" + line;\n                }, this)\n                .join(\"\\n\");\n            message += \"\\n\" + pad(\"\", lastLineDigits + col) + \"^\\n\";\n            return message;\n        } else {\n            return message + \" at index \" + (this.index - 1);\n        }\n\n        function pad(n, length) {\n            var s = String(n);\n            return Array(length - s.length + 1).join(\" \") + s;\n        }\n    }\n\n    function Parser(rules, start, options) {\n        if (rules instanceof Grammar) {\n            var grammar = rules;\n            var options = start;\n        } else {\n            var grammar = Grammar.fromCompiled(rules, start);\n        }\n        this.grammar = grammar;\n\n        // Read options\n        this.options = {\n            keepHistory: false,\n            lexer: grammar.lexer || new StreamLexer,\n        };\n        for (var key in (options || {})) {\n            this.options[key] = options[key];\n        }\n\n        // Setup lexer\n        this.lexer = this.options.lexer;\n        this.lexerState = undefined;\n\n        // Setup a table\n        var column = new Column(grammar, 0);\n        var table = this.table = [column];\n\n        // I could be expecting anything.\n        column.wants[grammar.start] = [];\n        column.predict(grammar.start);\n        // TODO what if start rule is nullable?\n        column.process();\n        this.current = 0; // token index\n    }\n\n    // create a reserved token for indicating a parse fail\n    Parser.fail = {};\n\n    Parser.prototype.feed = function(chunk) {\n        var lexer = this.lexer;\n        lexer.reset(chunk, this.lexerState);\n\n        var token;\n        while (true) {\n            try {\n                token = lexer.next();\n                if (!token) {\n                    break;\n                }\n            } catch (e) {\n                // Create the next column so that the error reporter\n                // can display the correctly predicted states.\n                var nextColumn = new Column(this.grammar, this.current + 1);\n                this.table.push(nextColumn);\n                var err = new Error(this.reportLexerError(e));\n                err.offset = this.current;\n                err.token = e.token;\n                throw err;\n            }\n            // We add new states to table[current+1]\n            var column = this.table[this.current];\n\n            // GC unused states\n            if (!this.options.keepHistory) {\n                delete this.table[this.current - 1];\n            }\n\n            var n = this.current + 1;\n            var nextColumn = new Column(this.grammar, n);\n            this.table.push(nextColumn);\n\n            // Advance all tokens that expect the symbol\n            var literal = token.text !== undefined ? token.text : token.value;\n            var value = lexer.constructor === StreamLexer ? token.value : token;\n            var scannable = column.scannable;\n            for (var w = scannable.length; w--; ) {\n                var state = scannable[w];\n                var expect = state.rule.symbols[state.dot];\n                // Try to consume the token\n                // either regex or literal\n                if (expect.test ? expect.test(value) :\n                    expect.type ? expect.type === token.type\n                                : expect.literal === literal) {\n                    // Add it\n                    var next = state.nextState({data: value, token: token, isToken: true, reference: n - 1});\n                    nextColumn.states.push(next);\n                }\n            }\n\n            // Next, for each of the rules, we either\n            // (a) complete it, and try to see if the reference row expected that\n            //     rule\n            // (b) predict the next nonterminal it expects by adding that\n            //     nonterminal's start state\n            // To prevent duplication, we also keep track of rules we have already\n            // added\n\n            nextColumn.process();\n\n            // If needed, throw an error:\n            if (nextColumn.states.length === 0) {\n                // No states at all! This is not good.\n                var err = new Error(this.reportError(token));\n                err.offset = this.current;\n                err.token = token;\n                throw err;\n            }\n\n            // maybe save lexer state\n            if (this.options.keepHistory) {\n              column.lexerState = lexer.save()\n            }\n\n            this.current++;\n        }\n        if (column) {\n          this.lexerState = lexer.save()\n        }\n\n        // Incrementally keep track of results\n        this.results = this.finish();\n\n        // Allow chaining, for whatever it's worth\n        return this;\n    };\n\n    Parser.prototype.reportLexerError = function(lexerError) {\n        var tokenDisplay, lexerMessage;\n        // Planning to add a token property to moo's thrown error\n        // even on erroring tokens to be used in error display below\n        var token = lexerError.token;\n        if (token) {\n            tokenDisplay = \"input \" + JSON.stringify(token.text[0]) + \" (lexer error)\";\n            lexerMessage = this.lexer.formatError(token, \"Syntax error\");\n        } else {\n            tokenDisplay = \"input (lexer error)\";\n            lexerMessage = lexerError.message;\n        }\n        return this.reportErrorCommon(lexerMessage, tokenDisplay);\n    };\n\n    Parser.prototype.reportError = function(token) {\n        var tokenDisplay = (token.type ? token.type + \" token: \" : \"\") + JSON.stringify(token.value !== undefined ? token.value : token);\n        var lexerMessage = this.lexer.formatError(token, \"Syntax error\");\n        return this.reportErrorCommon(lexerMessage, tokenDisplay);\n    };\n\n    Parser.prototype.reportErrorCommon = function(lexerMessage, tokenDisplay) {\n        var lines = [];\n        lines.push(lexerMessage);\n        var lastColumnIndex = this.table.length - 2;\n        var lastColumn = this.table[lastColumnIndex];\n        var expectantStates = lastColumn.states\n            .filter(function(state) {\n                var nextSymbol = state.rule.symbols[state.dot];\n                return nextSymbol && typeof nextSymbol !== \"string\";\n            });\n\n        if (expectantStates.length === 0) {\n            lines.push('Unexpected ' + tokenDisplay + '. I did not expect any more input. Here is the state of my parse table:\\n');\n            this.displayStateStack(lastColumn.states, lines);\n        } else {\n            lines.push('Unexpected ' + tokenDisplay + '. Instead, I was expecting to see one of the following:\\n');\n            // Display a \"state stack\" for each expectant state\n            // - which shows you how this state came to be, step by step.\n            // If there is more than one derivation, we only display the first one.\n            var stateStacks = expectantStates\n                .map(function(state) {\n                    return this.buildFirstStateStack(state, []) || [state];\n                }, this);\n            // Display each state that is expecting a terminal symbol next.\n            stateStacks.forEach(function(stateStack) {\n                var state = stateStack[0];\n                var nextSymbol = state.rule.symbols[state.dot];\n                var symbolDisplay = this.getSymbolDisplay(nextSymbol);\n                lines.push('A ' + symbolDisplay + ' based on:');\n                this.displayStateStack(stateStack, lines);\n            }, this);\n        }\n        lines.push(\"\");\n        return lines.join(\"\\n\");\n    }\n    \n    Parser.prototype.displayStateStack = function(stateStack, lines) {\n        var lastDisplay;\n        var sameDisplayCount = 0;\n        for (var j = 0; j < stateStack.length; j++) {\n            var state = stateStack[j];\n            var display = state.rule.toString(state.dot);\n            if (display === lastDisplay) {\n                sameDisplayCount++;\n            } else {\n                if (sameDisplayCount > 0) {\n                    lines.push('    ^ ' + sameDisplayCount + ' more lines identical to this');\n                }\n                sameDisplayCount = 0;\n                lines.push('    ' + display);\n            }\n            lastDisplay = display;\n        }\n    };\n\n    Parser.prototype.getSymbolDisplay = function(symbol) {\n        return getSymbolLongDisplay(symbol);\n    };\n\n    /*\n    Builds a the first state stack. You can think of a state stack as the call stack\n    of the recursive-descent parser which the Nearley parse algorithm simulates.\n    A state stack is represented as an array of state objects. Within a\n    state stack, the first item of the array will be the starting\n    state, with each successive item in the array going further back into history.\n\n    This function needs to be given a starting state and an empty array representing\n    the visited states, and it returns an single state stack.\n\n    */\n    Parser.prototype.buildFirstStateStack = function(state, visited) {\n        if (visited.indexOf(state) !== -1) {\n            // Found cycle, return null\n            // to eliminate this path from the results, because\n            // we don't know how to display it meaningfully\n            return null;\n        }\n        if (state.wantedBy.length === 0) {\n            return [state];\n        }\n        var prevState = state.wantedBy[0];\n        var childVisited = [state].concat(visited);\n        var childResult = this.buildFirstStateStack(prevState, childVisited);\n        if (childResult === null) {\n            return null;\n        }\n        return [state].concat(childResult);\n    };\n\n    Parser.prototype.save = function() {\n        var column = this.table[this.current];\n        column.lexerState = this.lexerState;\n        return column;\n    };\n\n    Parser.prototype.restore = function(column) {\n        var index = column.index;\n        this.current = index;\n        this.table[index] = column;\n        this.table.splice(index + 1);\n        this.lexerState = column.lexerState;\n\n        // Incrementally keep track of results\n        this.results = this.finish();\n    };\n\n    // nb. deprecated: use save/restore instead!\n    Parser.prototype.rewind = function(index) {\n        if (!this.options.keepHistory) {\n            throw new Error('set option `keepHistory` to enable rewinding')\n        }\n        // nb. recall column (table) indicies fall between token indicies.\n        //        col 0   --   token 0   --   col 1\n        this.restore(this.table[index]);\n    };\n\n    Parser.prototype.finish = function() {\n        // Return the possible parsings\n        var considerations = [];\n        var start = this.grammar.start;\n        var column = this.table[this.table.length - 1]\n        column.states.forEach(function (t) {\n            if (t.rule.name === start\n                    && t.dot === t.rule.symbols.length\n                    && t.reference === 0\n                    && t.data !== Parser.fail) {\n                considerations.push(t);\n            }\n        });\n        return considerations.map(function(c) {return c.data; });\n    };\n\n    function getSymbolLongDisplay(symbol) {\n        var type = typeof symbol;\n        if (type === \"string\") {\n            return symbol;\n        } else if (type === \"object\") {\n            if (symbol.literal) {\n                return JSON.stringify(symbol.literal);\n            } else if (symbol instanceof RegExp) {\n                return 'character matching ' + symbol;\n            } else if (symbol.type) {\n                return symbol.type + ' token';\n            } else if (symbol.test) {\n                return 'token matching ' + String(symbol.test);\n            } else {\n                throw new Error('Unknown symbol type: ' + symbol);\n            }\n        }\n    }\n\n    function getSymbolShortDisplay(symbol) {\n        var type = typeof symbol;\n        if (type === \"string\") {\n            return symbol;\n        } else if (type === \"object\") {\n            if (symbol.literal) {\n                return JSON.stringify(symbol.literal);\n            } else if (symbol instanceof RegExp) {\n                return symbol.toString();\n            } else if (symbol.type) {\n                return '%' + symbol.type;\n            } else if (symbol.test) {\n                return '<' + String(symbol.test) + '>';\n            } else {\n                throw new Error('Unknown symbol type: ' + symbol);\n            }\n        }\n    }\n\n    return {\n        Parser: Parser,\n        Grammar: Grammar,\n        Rule: Rule,\n    };\n\n}));\n",null,"(function(root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    define([], factory) /* global define */\n  } else if (typeof module === 'object' && module.exports) {\n    module.exports = factory()\n  } else {\n    root.moo = factory()\n  }\n}(this, function() {\n  'use strict';\n\n  var hasOwnProperty = Object.prototype.hasOwnProperty\n  var toString = Object.prototype.toString\n  var hasSticky = typeof new RegExp().sticky === 'boolean'\n\n  /***************************************************************************/\n\n  function isRegExp(o) { return o && toString.call(o) === '[object RegExp]' }\n  function isObject(o) { return o && typeof o === 'object' && !isRegExp(o) && !Array.isArray(o) }\n\n  function reEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n  }\n  function reGroups(s) {\n    var re = new RegExp('|' + s)\n    return re.exec('').length - 1\n  }\n  function reCapture(s) {\n    return '(' + s + ')'\n  }\n  function reUnion(regexps) {\n    if (!regexps.length) return '(?!)'\n    var source =  regexps.map(function(s) {\n      return \"(?:\" + s + \")\"\n    }).join('|')\n    return \"(?:\" + source + \")\"\n  }\n\n  function regexpOrLiteral(obj) {\n    if (typeof obj === 'string') {\n      return '(?:' + reEscape(obj) + ')'\n\n    } else if (isRegExp(obj)) {\n      // TODO: consider /u support\n      if (obj.ignoreCase) throw new Error('RegExp /i flag not allowed')\n      if (obj.global) throw new Error('RegExp /g flag is implied')\n      if (obj.sticky) throw new Error('RegExp /y flag is implied')\n      if (obj.multiline) throw new Error('RegExp /m flag is implied')\n      return obj.source\n\n    } else {\n      throw new Error('Not a pattern: ' + obj)\n    }\n  }\n\n  function objectToRules(object) {\n    var keys = Object.getOwnPropertyNames(object)\n    var result = []\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i]\n      var thing = object[key]\n      var rules = [].concat(thing)\n      if (key === 'include') {\n        for (var j = 0; j < rules.length; j++) {\n          result.push({include: rules[j]})\n        }\n        continue\n      }\n      var match = []\n      rules.forEach(function(rule) {\n        if (isObject(rule)) {\n          if (match.length) result.push(ruleOptions(key, match))\n          result.push(ruleOptions(key, rule))\n          match = []\n        } else {\n          match.push(rule)\n        }\n      })\n      if (match.length) result.push(ruleOptions(key, match))\n    }\n    return result\n  }\n\n  function arrayToRules(array) {\n    var result = []\n    for (var i = 0; i < array.length; i++) {\n      var obj = array[i]\n      if (obj.include) {\n        var include = [].concat(obj.include)\n        for (var j = 0; j < include.length; j++) {\n          result.push({include: include[j]})\n        }\n        continue\n      }\n      if (!obj.type) {\n        throw new Error('Rule has no type: ' + JSON.stringify(obj))\n      }\n      result.push(ruleOptions(obj.type, obj))\n    }\n    return result\n  }\n\n  function ruleOptions(type, obj) {\n    if (!isObject(obj)) {\n      obj = { match: obj }\n    }\n    if (obj.include) {\n      throw new Error('Matching rules cannot also include states')\n    }\n\n    // nb. error and fallback imply lineBreaks\n    var options = {\n      defaultType: type,\n      lineBreaks: !!obj.error || !!obj.fallback,\n      pop: false,\n      next: null,\n      push: null,\n      error: false,\n      fallback: false,\n      value: null,\n      type: null,\n      shouldThrow: false,\n    }\n\n    // Avoid Object.assign(), so we support IE9+\n    for (var key in obj) {\n      if (hasOwnProperty.call(obj, key)) {\n        options[key] = obj[key]\n      }\n    }\n\n    // type transform cannot be a string\n    if (typeof options.type === 'string' && type !== options.type) {\n      throw new Error(\"Type transform cannot be a string (type '\" + options.type + \"' for token '\" + type + \"')\")\n    }\n\n    // convert to array\n    var match = options.match\n    options.match = Array.isArray(match) ? match : match ? [match] : []\n    options.match.sort(function(a, b) {\n      return isRegExp(a) && isRegExp(b) ? 0\n           : isRegExp(b) ? -1 : isRegExp(a) ? +1 : b.length - a.length\n    })\n    return options\n  }\n\n  function toRules(spec) {\n    return Array.isArray(spec) ? arrayToRules(spec) : objectToRules(spec)\n  }\n\n  var defaultErrorRule = ruleOptions('error', {lineBreaks: true, shouldThrow: true})\n  function compileRules(rules, hasStates) {\n    var errorRule = null\n    var fast = Object.create(null)\n    var fastAllowed = true\n    var unicodeFlag = null\n    var groups = []\n    var parts = []\n\n    // If there is a fallback rule, then disable fast matching\n    for (var i = 0; i < rules.length; i++) {\n      if (rules[i].fallback) {\n        fastAllowed = false\n      }\n    }\n\n    for (var i = 0; i < rules.length; i++) {\n      var options = rules[i]\n\n      if (options.include) {\n        // all valid inclusions are removed by states() preprocessor\n        throw new Error('Inheritance is not allowed in stateless lexers')\n      }\n\n      if (options.error || options.fallback) {\n        // errorRule can only be set once\n        if (errorRule) {\n          if (!options.fallback === !errorRule.fallback) {\n            throw new Error(\"Multiple \" + (options.fallback ? \"fallback\" : \"error\") + \" rules not allowed (for token '\" + options.defaultType + \"')\")\n          } else {\n            throw new Error(\"fallback and error are mutually exclusive (for token '\" + options.defaultType + \"')\")\n          }\n        }\n        errorRule = options\n      }\n\n      var match = options.match.slice()\n      if (fastAllowed) {\n        while (match.length && typeof match[0] === 'string' && match[0].length === 1) {\n          var word = match.shift()\n          fast[word.charCodeAt(0)] = options\n        }\n      }\n\n      // Warn about inappropriate state-switching options\n      if (options.pop || options.push || options.next) {\n        if (!hasStates) {\n          throw new Error(\"State-switching options are not allowed in stateless lexers (for token '\" + options.defaultType + \"')\")\n        }\n        if (options.fallback) {\n          throw new Error(\"State-switching options are not allowed on fallback tokens (for token '\" + options.defaultType + \"')\")\n        }\n      }\n\n      // Only rules with a .match are included in the RegExp\n      if (match.length === 0) {\n        continue\n      }\n      fastAllowed = false\n\n      groups.push(options)\n\n      // Check unicode flag is used everywhere or nowhere\n      for (var j = 0; j < match.length; j++) {\n        var obj = match[j]\n        if (!isRegExp(obj)) {\n          continue\n        }\n\n        if (unicodeFlag === null) {\n          unicodeFlag = obj.unicode\n        } else if (unicodeFlag !== obj.unicode && options.fallback === false) {\n          throw new Error('If one rule is /u then all must be')\n        }\n      }\n\n      // convert to RegExp\n      var pat = reUnion(match.map(regexpOrLiteral))\n\n      // validate\n      var regexp = new RegExp(pat)\n      if (regexp.test(\"\")) {\n        throw new Error(\"RegExp matches empty string: \" + regexp)\n      }\n      var groupCount = reGroups(pat)\n      if (groupCount > 0) {\n        throw new Error(\"RegExp has capture groups: \" + regexp + \"\\nUse (?: … ) instead\")\n      }\n\n      // try and detect rules matching newlines\n      if (!options.lineBreaks && regexp.test('\\n')) {\n        throw new Error('Rule should declare lineBreaks: ' + regexp)\n      }\n\n      // store regex\n      parts.push(reCapture(pat))\n    }\n\n\n    // If there's no fallback rule, use the sticky flag so we only look for\n    // matches at the current index.\n    //\n    // If we don't support the sticky flag, then fake it using an irrefutable\n    // match (i.e. an empty pattern).\n    var fallbackRule = errorRule && errorRule.fallback\n    var flags = hasSticky && !fallbackRule ? 'ym' : 'gm'\n    var suffix = hasSticky || fallbackRule ? '' : '|'\n\n    if (unicodeFlag === true) flags += \"u\"\n    var combined = new RegExp(reUnion(parts) + suffix, flags)\n    return {regexp: combined, groups: groups, fast: fast, error: errorRule || defaultErrorRule}\n  }\n\n  function compile(rules) {\n    var result = compileRules(toRules(rules))\n    return new Lexer({start: result}, 'start')\n  }\n\n  function checkStateGroup(g, name, map) {\n    var state = g && (g.push || g.next)\n    if (state && !map[state]) {\n      throw new Error(\"Missing state '\" + state + \"' (in token '\" + g.defaultType + \"' of state '\" + name + \"')\")\n    }\n    if (g && g.pop && +g.pop !== 1) {\n      throw new Error(\"pop must be 1 (in token '\" + g.defaultType + \"' of state '\" + name + \"')\")\n    }\n  }\n  function compileStates(states, start) {\n    var all = states.$all ? toRules(states.$all) : []\n    delete states.$all\n\n    var keys = Object.getOwnPropertyNames(states)\n    if (!start) start = keys[0]\n\n    var ruleMap = Object.create(null)\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i]\n      ruleMap[key] = toRules(states[key]).concat(all)\n    }\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i]\n      var rules = ruleMap[key]\n      var included = Object.create(null)\n      for (var j = 0; j < rules.length; j++) {\n        var rule = rules[j]\n        if (!rule.include) continue\n        var splice = [j, 1]\n        if (rule.include !== key && !included[rule.include]) {\n          included[rule.include] = true\n          var newRules = ruleMap[rule.include]\n          if (!newRules) {\n            throw new Error(\"Cannot include nonexistent state '\" + rule.include + \"' (in state '\" + key + \"')\")\n          }\n          for (var k = 0; k < newRules.length; k++) {\n            var newRule = newRules[k]\n            if (rules.indexOf(newRule) !== -1) continue\n            splice.push(newRule)\n          }\n        }\n        rules.splice.apply(rules, splice)\n        j--\n      }\n    }\n\n    var map = Object.create(null)\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i]\n      map[key] = compileRules(ruleMap[key], true)\n    }\n\n    for (var i = 0; i < keys.length; i++) {\n      var name = keys[i]\n      var state = map[name]\n      var groups = state.groups\n      for (var j = 0; j < groups.length; j++) {\n        checkStateGroup(groups[j], name, map)\n      }\n      var fastKeys = Object.getOwnPropertyNames(state.fast)\n      for (var j = 0; j < fastKeys.length; j++) {\n        checkStateGroup(state.fast[fastKeys[j]], name, map)\n      }\n    }\n\n    return new Lexer(map, start)\n  }\n\n  function keywordTransform(map) {\n    var reverseMap = Object.create(null)\n    var byLength = Object.create(null)\n    var types = Object.getOwnPropertyNames(map)\n    for (var i = 0; i < types.length; i++) {\n      var tokenType = types[i]\n      var item = map[tokenType]\n      var keywordList = Array.isArray(item) ? item : [item]\n      keywordList.forEach(function(keyword) {\n        (byLength[keyword.length] = byLength[keyword.length] || []).push(keyword)\n        if (typeof keyword !== 'string') {\n          throw new Error(\"keyword must be string (in keyword '\" + tokenType + \"')\")\n        }\n        reverseMap[keyword] = tokenType\n      })\n    }\n\n    // fast string lookup\n    // https://jsperf.com/string-lookups\n    function str(x) { return JSON.stringify(x) }\n    var source = ''\n    source += 'switch (value.length) {\\n'\n    for (var length in byLength) {\n      var keywords = byLength[length]\n      source += 'case ' + length + ':\\n'\n      source += 'switch (value) {\\n'\n      keywords.forEach(function(keyword) {\n        var tokenType = reverseMap[keyword]\n        source += 'case ' + str(keyword) + ': return ' + str(tokenType) + '\\n'\n      })\n      source += '}\\n'\n    }\n    source += '}\\n'\n    return Function('value', source) // type\n  }\n\n  /***************************************************************************/\n\n  var Lexer = function(states, state) {\n    this.startState = state\n    this.states = states\n    this.buffer = ''\n    this.stack = []\n    this.reset()\n  }\n\n  Lexer.prototype.reset = function(data, info) {\n    this.buffer = data || ''\n    this.index = 0\n    this.line = info ? info.line : 1\n    this.col = info ? info.col : 1\n    this.queuedToken = info ? info.queuedToken : null\n    this.queuedThrow = info ? info.queuedThrow : null\n    this.setState(info ? info.state : this.startState)\n    this.stack = info && info.stack ? info.stack.slice() : []\n    return this\n  }\n\n  Lexer.prototype.save = function() {\n    return {\n      line: this.line,\n      col: this.col,\n      state: this.state,\n      stack: this.stack.slice(),\n      queuedToken: this.queuedToken,\n      queuedThrow: this.queuedThrow,\n    }\n  }\n\n  Lexer.prototype.setState = function(state) {\n    if (!state || this.state === state) return\n    this.state = state\n    var info = this.states[state]\n    this.groups = info.groups\n    this.error = info.error\n    this.re = info.regexp\n    this.fast = info.fast\n  }\n\n  Lexer.prototype.popState = function() {\n    this.setState(this.stack.pop())\n  }\n\n  Lexer.prototype.pushState = function(state) {\n    this.stack.push(this.state)\n    this.setState(state)\n  }\n\n  var eat = hasSticky ? function(re, buffer) { // assume re is /y\n    return re.exec(buffer)\n  } : function(re, buffer) { // assume re is /g\n    var match = re.exec(buffer)\n    // will always match, since we used the |(?:) trick\n    if (match[0].length === 0) {\n      return null\n    }\n    return match\n  }\n\n  Lexer.prototype._getGroup = function(match) {\n    var groupCount = this.groups.length\n    for (var i = 0; i < groupCount; i++) {\n      if (match[i + 1] !== undefined) {\n        return this.groups[i]\n      }\n    }\n    throw new Error('Cannot find token type for matched text')\n  }\n\n  function tokenToString() {\n    return this.value\n  }\n\n  Lexer.prototype.next = function() {\n    var index = this.index\n\n    // If a fallback token matched, we don't need to re-run the RegExp\n    if (this.queuedGroup) {\n      var token = this._token(this.queuedGroup, this.queuedText, index)\n      this.queuedGroup = null\n      this.queuedText = \"\"\n      return token\n    }\n\n    var buffer = this.buffer\n    if (index === buffer.length) {\n      return // EOF\n    }\n\n    // Fast matching for single characters\n    var group = this.fast[buffer.charCodeAt(index)]\n    if (group) {\n      return this._token(group, buffer.charAt(index), index)\n    }\n\n    // Execute RegExp\n    var re = this.re\n    re.lastIndex = index\n    var match = eat(re, buffer)\n\n    // Error tokens match the remaining buffer\n    var error = this.error\n    if (match == null) {\n      return this._token(error, buffer.slice(index, buffer.length), index)\n    }\n\n    var group = this._getGroup(match)\n    var text = match[0]\n\n    if (error.fallback && match.index !== index) {\n      this.queuedGroup = group\n      this.queuedText = text\n\n      // Fallback tokens contain the unmatched portion of the buffer\n      return this._token(error, buffer.slice(index, match.index), index)\n    }\n\n    return this._token(group, text, index)\n  }\n\n  Lexer.prototype._token = function(group, text, offset) {\n    // count line breaks\n    var lineBreaks = 0\n    if (group.lineBreaks) {\n      var matchNL = /\\n/g\n      var nl = 1\n      if (text === '\\n') {\n        lineBreaks = 1\n      } else {\n        while (matchNL.exec(text)) { lineBreaks++; nl = matchNL.lastIndex }\n      }\n    }\n\n    var token = {\n      type: (typeof group.type === 'function' && group.type(text)) || group.defaultType,\n      value: typeof group.value === 'function' ? group.value(text) : text,\n      text: text,\n      toString: tokenToString,\n      offset: offset,\n      lineBreaks: lineBreaks,\n      line: this.line,\n      col: this.col,\n    }\n    // nb. adding more props to token object will make V8 sad!\n\n    var size = text.length\n    this.index += size\n    this.line += lineBreaks\n    if (lineBreaks !== 0) {\n      this.col = size - nl + 1\n    } else {\n      this.col += size\n    }\n\n    // throw, if no rule with {error: true}\n    if (group.shouldThrow) {\n      throw new Error(this.formatError(token, \"invalid syntax\"))\n    }\n\n    if (group.pop) this.popState()\n    else if (group.push) this.pushState(group.push)\n    else if (group.next) this.setState(group.next)\n\n    return token\n  }\n\n  if (typeof Symbol !== 'undefined' && Symbol.iterator) {\n    var LexerIterator = function(lexer) {\n      this.lexer = lexer\n    }\n\n    LexerIterator.prototype.next = function() {\n      var token = this.lexer.next()\n      return {value: token, done: !token}\n    }\n\n    LexerIterator.prototype[Symbol.iterator] = function() {\n      return this\n    }\n\n    Lexer.prototype[Symbol.iterator] = function() {\n      return new LexerIterator(this)\n    }\n  }\n\n  Lexer.prototype.formatError = function(token, message) {\n    if (token == null) {\n      // An undefined token indicates EOF\n      var text = this.buffer.slice(this.index)\n      var token = {\n        text: text,\n        offset: this.index,\n        lineBreaks: text.indexOf('\\n') === -1 ? 0 : 1,\n        line: this.line,\n        col: this.col,\n      }\n    }\n    var start = Math.max(0, token.offset - token.col + 1)\n    var eol = token.lineBreaks ? token.text.indexOf('\\n') : token.text.length\n    var firstLine = this.buffer.substring(start, token.offset + eol)\n    message += \" at line \" + token.line + \" col \" + token.col + \":\\n\\n\"\n    message += \"  \" + firstLine + \"\\n\"\n    message += \"  \" + Array(token.col).join(\" \") + \"^\"\n    return message\n  }\n\n  Lexer.prototype.clone = function() {\n    return new Lexer(this.states, this.state)\n  }\n\n  Lexer.prototype.has = function(tokenType) {\n    return true\n  }\n\n\n  return {\n    compile: compile,\n    states: compileStates,\n    error: Object.freeze({error: true}),\n    fallback: Object.freeze({fallback: true}),\n    keywords: keywordTransform,\n  }\n\n}));\n","/**\n * This file defines a Lexer for the GBB Language.\n * It uses plain old JS as it need to be loaded into Nearley and executed through it.\n*/\nconst moo = require('moo');\n\nconst lexer = moo.compile({\n    version: {\n        match: /(?:GBB\\/1\\.0)|(?:GBB)|(?:gbb)/,\n        value: s => \"GBB/1.0\"\n    },\n    keyword:\t\t\t{\n        match: /(?:size)|(?:cell)|(?:head)/,\n        value: s => s\n    },\n    color:\t\t\t\t{\n        match: /(?:Azul)|(?:A)|(?:a)|(?:Negro)|(?:N)|(?:n)|(?:Rojo)|(?:R)|(?:r)|(?:Verde)|(?:V)|(?:v)/,\n        value: s => s.toLowerCase().charAt(0)\n    },\n    number:\t\t\t\t{\n        match: /[0-9]+/,\n        value: s => parseInt(s)\n    },\n    newline:\t\t\t{\n        match: /[\\n\\v\\f]+/,\n        lineBreaks: true,\n        value: s => '\\n'\n    },\n    whitespace:\t{\n        match: /[ \\t]+/,\n        value: s => ' '\n    }\n});\n\nmodule.exports = lexer;\n","/* eslint-disable  */\nmodule.exports = {\n    id: function () {\n        return function (tokenList) {\n            return tokenList[0];\n        };\n    },\n    null: function () {\n        return function (tokenList) {\n            return null;\n        };\n    },\n    array: function (arr) {\n        return function (tokenList) {\n            var result = [];\n            for (var i = 0; i < arr.length; i++) {\n                result.push(tokenList[arr[i]]);\n            }\n            return result;\n        };\n    },\n    object: function (obj) {\n        return function (tokenList) {\n            var keys = Object.keys(obj);\n            var result = {};\n            for (var i = 0; i < keys.length; i++) {\n                var value = obj[keys[i]];\n                result[keys[i]] = tokenList[value];\n            }\n            return result;\n        };\n    },\n    list: {\n        head: function () {\n            return function (tokenList) {\n                return [tokenList[0]];\n            };\n        },\n        tail: function () {\n            return function (tokenList) {\n                return [tokenList[0]].concat(tokenList[2]);\n            };\n        }\n    }\n};\n","// Generated automatically by nearley, version 2.20.1\n// http://github.com/Hardmath123/nearley\n(function () {\nfunction id(x) { return x[0]; }\n\nconst lexer = require('./gbb-lexer.js');\nconst h = require('./nearley-helper.js');\nvar grammar = {\n    Lexer: lexer,\n    ParserRules: [\n    {\"name\": \"Main$ebnf$1\", \"symbols\": [\"__\"], \"postprocess\": id},\n    {\"name\": \"Main$ebnf$1\", \"symbols\": [], \"postprocess\": function(d) {return null;}},\n    {\"name\": \"Main\", \"symbols\": [\"FormatDeclaration\", \"__\", \"SizeDeclaration\", \"Main$ebnf$1\"], \"postprocess\": function (d) { return { format: d[0], width: d[2][1], height: d[2][2] }; }},\n    {\"name\": \"Main$ebnf$2\", \"symbols\": [\"__\"], \"postprocess\": id},\n    {\"name\": \"Main$ebnf$2\", \"symbols\": [], \"postprocess\": function(d) {return null;}},\n    {\"name\": \"Main\", \"symbols\": [\"FormatDeclaration\", \"__\", \"SizeDeclaration\", \"__\", \"CellDeclarationList\", \"Main$ebnf$2\"], \"postprocess\": function (d) { return { format: d[0], width: d[2][1], height: d[2][2], cells: d[4] }; }},\n    {\"name\": \"Main$ebnf$3$subexpression$1\", \"symbols\": [\"CellDeclarationList\", \"__\"]},\n    {\"name\": \"Main$ebnf$3\", \"symbols\": [\"Main$ebnf$3$subexpression$1\"], \"postprocess\": id},\n    {\"name\": \"Main$ebnf$3\", \"symbols\": [], \"postprocess\": function(d) {return null;}},\n    {\"name\": \"Main$ebnf$4\", \"symbols\": [\"__\"], \"postprocess\": id},\n    {\"name\": \"Main$ebnf$4\", \"symbols\": [], \"postprocess\": function(d) {return null;}},\n    {\"name\": \"Main\", \"symbols\": [\"FormatDeclaration\", \"__\", \"SizeDeclaration\", \"__\", \"Main$ebnf$3\", \"HeadDeclaration\", \"Main$ebnf$4\"], \"postprocess\": function(d) { return { format: d[0], width: d[2][1], height: d[2][2], head: [d[5][1], d[5][2]], cells: d[4] ? d[4][0] : [] }; }},\n    {\"name\": \"FormatDeclaration\", \"symbols\": [(lexer.has(\"version\") ? {type: \"version\"} : version)], \"postprocess\": h.id()},\n    {\"name\": \"SizeDeclaration\", \"symbols\": [{\"literal\":\"size\"}, \"_\", \"Number\", \"_\", \"Number\"], \"postprocess\": h.array([0, 2, 4])},\n    {\"name\": \"HeadDeclaration\", \"symbols\": [{\"literal\":\"head\"}, \"_\", \"Number\", \"_\", \"Number\"], \"postprocess\": h.array([0, 2, 4])},\n    {\"name\": \"CellDeclarationList\", \"symbols\": [\"CellDeclaration\"], \"postprocess\": h.list.head()},\n    {\"name\": \"CellDeclarationList\", \"symbols\": [\"CellDeclaration\", \"__\", \"CellDeclarationList\"], \"postprocess\": h.list.tail()},\n    {\"name\": \"CellDeclaration\", \"symbols\": [{\"literal\":\"cell\"}, \"_\", \"Number\", \"_\", \"Number\", \"_\", \"StonesDefinition\"], \"postprocess\": h.object({x: 2, y: 4, declaring: 6})},\n    {\"name\": \"StonesDefinition\", \"symbols\": [\"SingleStoneDefinition\"], \"postprocess\": h.list.head()},\n    {\"name\": \"StonesDefinition\", \"symbols\": [\"SingleStoneDefinition\", \"_\", \"StonesDefinition\"], \"postprocess\": h.list.tail()},\n    {\"name\": \"SingleStoneDefinition\", \"symbols\": [\"Color\", \"_\", \"Number\"], \"postprocess\": h.object({color: 0, value: 2})},\n    {\"name\": \"Color\", \"symbols\": [(lexer.has(\"color\") ? {type: \"color\"} : color)], \"postprocess\": h.id()},\n    {\"name\": \"Number\", \"symbols\": [(lexer.has(\"number\") ? {type: \"number\"} : number)], \"postprocess\": h.id()},\n    {\"name\": \"_\", \"symbols\": [(lexer.has(\"whitespace\") ? {type: \"whitespace\"} : whitespace)], \"postprocess\": h.null()},\n    {\"name\": \"__$ebnf$1$subexpression$1\", \"symbols\": [(lexer.has(\"whitespace\") ? {type: \"whitespace\"} : whitespace)]},\n    {\"name\": \"__$ebnf$1$subexpression$1\", \"symbols\": [(lexer.has(\"newline\") ? {type: \"newline\"} : newline)]},\n    {\"name\": \"__$ebnf$1\", \"symbols\": [\"__$ebnf$1$subexpression$1\"]},\n    {\"name\": \"__$ebnf$1$subexpression$2\", \"symbols\": [(lexer.has(\"whitespace\") ? {type: \"whitespace\"} : whitespace)]},\n    {\"name\": \"__$ebnf$1$subexpression$2\", \"symbols\": [(lexer.has(\"newline\") ? {type: \"newline\"} : newline)]},\n    {\"name\": \"__$ebnf$1\", \"symbols\": [\"__$ebnf$1\", \"__$ebnf$1$subexpression$2\"], \"postprocess\": function arrpush(d) {return d[0].concat([d[1]]);}},\n    {\"name\": \"__\", \"symbols\": [\"__$ebnf$1\"], \"postprocess\": h.null()}\n]\n  , ParserStart: \"Main\"\n}\nif (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') {\n   module.exports = grammar;\n} else {\n   window.grammar = grammar;\n}\n})();\n",null,null,null,null,null,null,null],"names":["require$$0","this","GBBParsingErrors","require$$1","lexer","Lexer","Parser","Grammar","GBBStringifyingErrors"],"mappings":"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"}